uint8_t State; // main state machine
uint8_t* ole_data_ptr; // compressed ole file.
uint32_t ole_data_len;
- bool vba_analysis;
+ bool vba_analysis;
+
+ void get_ole_data(uint8_t*& ole_data_ptr, uint32_t& ole_data_len)
+ {
+ ole_data_ptr = this->ole_data_ptr;
+ ole_data_len = this->ole_data_len;
+ }
+
+ void ole_data_reset()
+ {
+ ole_data_ptr = nullptr;
+ ole_data_len = 0;
+ }
};
/* Macros */
output.set(input);
}
+void HttpMsgBody::get_ole_data()
+{
+ uint8_t* ole_data_ptr;
+ uint32_t ole_len;
+
+ session_data->fd_state->get_ole_data(ole_data_ptr, ole_len);
+
+ if (ole_data_ptr)
+ {
+ ole_data.set(ole_len, ole_data_ptr, false);
+
+ //Reset the ole data ptr once it is stored in msg body
+ session_data->fd_state->ole_data_reset();
+ }
+}
+
void HttpMsgBody::do_file_decompression(const Field& input, Field& output)
{
if ((source_id == SRC_CLIENT) || (session_data->fd_state == nullptr))
assert((uint64_t)session_data->file_decomp_buffer_size_remaining[source_id] >=
output_length);
session_data->file_decomp_buffer_size_remaining[source_id] -= output_length;
+ get_ole_data();
+
break;
}
}
if (decompressed_vba_data.length() != STAT_NOT_COMPUTE)
return decompressed_vba_data;
- if (!session_data->fd_state->ole_data_ptr || !session_data->fd_state->ole_data_len)
- return Field::FIELD_NULL;
+ if (ole_data.length() <= 0)
+ {
+ decompressed_vba_data.set(STAT_NO_SOURCE);
+ return decompressed_vba_data;
+ }
uint8_t* buf = nullptr;
uint32_t buf_len = 0;
VBA_DEBUG(vba_data_trace, DEFAULT_TRACE_OPTION_ID, TRACE_INFO_LEVEL, CURRENT_PACKET,
"Found OLE file. Sending %d bytes for the processing.\n",
- session_data->fd_state->ole_data_len);
+ ole_data.length());
+
+ oleprocess(ole_data.start(), ole_data.length(), buf, buf_len);
- oleprocess(session_data->fd_state->ole_data_ptr, session_data->fd_state->ole_data_len, buf,
- buf_len);
if (buf && buf_len)
decompressed_vba_data.set(buf_len, buf, true);
else
decompressed_vba_data.set(STAT_NOT_PRESENT);
- session_data->fd_state->ole_data_ptr = nullptr;
- session_data->fd_state->ole_data_len = 0;
-
return decompressed_vba_data;
}
int32_t detect_length);
void get_file_info( FileDirection dir, const uint8_t*& filename_buffer,
uint32_t& filename_length, const uint8_t*& uri_buffer, uint32_t& uri_length);
+ void get_ole_data();
// In order of generation
Field msg_text_new;
Field norm_js_data;
Field classic_client_body; // URI normalization applied
Field decompressed_vba_data;
+ Field ole_data;
int32_t publish_length = HttpCommon::STAT_NOT_PRESENT;
};