我有一个库,在构造函数中需要const char *src
。如下:
MYCLASS::MYCLASS(const char *src)
我试图从nginx模块中使用它来将cookie的值传递给这个库,并且我得到了一些内存损坏。
我无法弄清楚我此刻做错了什么。在“' cookie”的调试中报告的cookie值总是正确的,但是在u_cookie上报告的那个只在第一个请求上是正确的,在nginx提供其他请求并且池以某种方式被其他人使用之后,返回的值总是包含一个额外的字符。
ngx_str_t cookie = (ngx_str_t)ngx_string("THECOOKIE");
ngx_int_t location;
ngx_str_t cookie_value;
location = ngx_http_parse_multi_header_lines(&r->headers_in.cookies, &cookie, &cookie_value);
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,"cookie: \"%V\"", &cookie_value);
u_char *u_cookie = (u_char *)ngx_pcalloc(r->pool, cookie_value.len);
ngx_copy(u_cookie, cookie_value.data, cookie_value.len);
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,"u_cookie: \"%s\"", u_cookie);
MYCLASS myclass( (const char*)u_cookie );
日志中的输出看起来像这样..
2015/09/30 04:49:32 [debug] cookie:" 405JanIN9ztP / snEzyucny8KdgN"
2015/09/30 04:49:32 [debug] u_cookie:" 405JanIN9ztP / snEzyucny8KdgNo"
答案 0 :(得分:0)
这是因为ngx_copy
只能复制N个字符(其中N - 是cookie的长度)。但是你也需要设置空字符串终止符!像这样:
u_char *u_cookie = (u_char *)ngx_pcalloc(r->pool, cookie_value.len + 1); // +1 for null char
ngx_copy(u_cookie, cookie_value.data, cookie_value.len);
u_cookie[cookie_value.len] = 0