Merge in SNORT/snort3 from ~OSERHIIE/snort3:js_pdf_fixup to master
Squashed commit of the following:
commit
a1ea7641078ab9622838882605cfd2ffbf012e84
Author: Oleksandr Serhiienko <oserhiie@cisco.com>
Date: Mon Dec 5 15:08:20 2022 +0100
js_norm: fix pdf_tokenizer_test on FreeBSD platform
commit
af4be627c44f45dcae8fc24fe085ff4c03d972bf
Author: Oleksandr Serhiienko <oserhiie@cisco.com>
Date: Mon Dec 5 15:05:54 2022 +0100
js_norm: update PDF tokenizer to use glue input streambuf
* js_norm: update PDF tokenizer EOF rule to cover all starting conditions
* http_inspect: update PDF JSNorm to use istreambuf_glue
<jshstr>{HEX_STR_BODY} { EXEC(h_hex_hex2chr()) }
<jshstr>{HEX_STR_SKIP} { }
-<<EOF>> { return PDFRet::EOS; }
+<INITIAL,dictnr,litstr,hexstr,jslstr,jshstr><<EOF>> { return PDFRet::EOS; }
%%
auto src = chunk.first;
auto exp = chunk.second;
- in.rdbuf()->pubsetbuf((char*)src.c_str(), src.length());
+ in.str(src);
out.str("");
auto r = extractor.process();
}
// an input stream should not write to its buffer
- pdf_in.rdbuf()->pubsetbuf(const_cast<char*>((const char*)src_ptr), src_end - src_ptr);
+ buf_pdf_in.pubsetbuf(nullptr, 0)
+ ->pubsetbuf(const_cast<char*>((const char*)src_ptr), src_end - src_ptr);
+
pdf_out.clear();
delete[] buf_pdf_out.take_data();
}
HttpPDFJSNorm(JSNormConfig* jsn_config, uint64_t tid) :
- HttpJSNorm(jsn_config), pdf_out(&buf_pdf_out), extractor(pdf_in, pdf_out)
+ HttpJSNorm(jsn_config), pdf_in(&buf_pdf_in), pdf_out(&buf_pdf_out), extractor(pdf_in, pdf_out)
{ trans_num = tid; }
protected:
bool post_proc(int) override;
private:
+ snort::istreambuf_glue buf_pdf_in;
snort::ostreambuf_infl buf_pdf_out;
- std::istringstream pdf_in;
+ std::istream pdf_in;
std::ostream pdf_out;
jsn::PDFTokenizer extractor;
};