if (htp_tx_response_headers(tx) != NULL) {
const htp_header_t *h_content_type = htp_tx_response_header(tx, "content-type");
if (h_content_type != NULL) {
- const size_t size = htp_header_value_len(h_content_type) * 2 + 1;
- char string[size];
- BytesToStringBuffer(htp_header_value_ptr(h_content_type),
- htp_header_value_len(h_content_type), string, size);
- char *p = strchr(string, ';');
+ uint32_t len = (uint32_t)htp_header_value_len(h_content_type);
+ const uint8_t *p = memchr(htp_header_value_ptr(h_content_type), ';', len);
if (p != NULL)
- *p = '\0';
- SCJbSetString(js, "http_content_type", string);
+ len = (uint32_t)(p - htp_header_value_ptr(h_content_type));
+ SCJbSetStringFromBytes(
+ js, "http_content_type", htp_header_value_ptr(h_content_type), len);
}
const htp_header_t *h_content_range = htp_tx_response_header(tx, "content-range");
if (h_content_range != NULL) {
return string;
}
-/** \brief Turn byte array into string.
- *
- * All non-printables are copied over, except for '\0', which is
- * turned into literal \0 in the string.
- *
- * \param bytes byte array
- * \param nbytes number of bytes
- * \param outstr[out] buffer to fill
- * \param outlen size of outstr. Must be at least 2 * nbytes + 1 in size
- */
-void BytesToStringBuffer(const uint8_t *bytes, size_t nbytes, char *outstr, size_t outlen)
-{
- DEBUG_VALIDATE_BUG_ON(outlen < (nbytes * 2 + 1));
-
- size_t n = nbytes + 1;
- size_t nulls = 0;
-
- size_t u;
- for (u = 0; u < nbytes; u++) {
- if (bytes[u] == '\0')
- nulls++;
- }
- n += nulls;
-
- char string[n];
-
- if (nulls == 0) {
- /* no nulls */
- memcpy(string, bytes, nbytes);
- string[nbytes] = '\0';
- } else {
- /* nulls present */
- char *dst = string;
- for (u = 0; u < nbytes; u++) {
- if (bytes[u] == '\0') {
- *dst++ = '\\';
- *dst++ = '0';
- } else {
- *dst++ = bytes[u];
- }
- }
- *dst = '\0';
- }
-
- strlcpy(outstr, string, outlen);
-}
-
int ByteExtractUint64(uint64_t *res, int e, uint16_t len, const uint8_t *bytes)
{
uint64_t i64;
* \return string nul-terminated string or NULL on error
*/
char *BytesToString(const uint8_t *bytes, size_t nbytes);
-void BytesToStringBuffer(const uint8_t *bytes, size_t nbytes, char *outstr, size_t outlen);
/**
* Extract bytes from a byte string and convert to a unint64_t.