toland / patron

Ruby HTTP client based on libcurl
http://toland.github.com/patron/
MIT License
541 stars 73 forks source link

Patron segv when multiple post requests with multipart are attempted #119

Closed joemce closed 8 years ago

joemce commented 8 years ago

The clean() function in session_ext.c does not reset the state->post and state->last pointers. This can lead to a segv in future post requests.

Thread 1 "ruby" received signal SIGSEGV, Segmentation fault.
0x00007ffff5a55e08 in curl_formfree () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
(gdb) where
#0  0x00007ffff5a55e08 in curl_formfree () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#1  0x00007ffff5a55e14 in curl_formfree () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#2  0x00007ffff5cb8e6a in cleanup (self=<optimized out>) at session_ext.c:671
#3  0x00007ffff79c1ea3 in rb_ensure () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#4  0x00007ffff5cb9d3a in session_handle_request (self=9483000, request=8697840) at session_ext.c:694
#5  0x00007ffff7ad00bb in ?? () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#6  0x00007ffff7ad3e31 in ?? () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#7  0x00007ffff7ad8d82 in ?? () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#8  0x00007ffff7adf8e4 in rb_yield () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#9  0x00007ffff797d76c in rb_ary_each () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#10 0x00007ffff7ad00bb in ?? () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#11 0x00007ffff7ade0c3 in ?? () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#12 0x00007ffff7adf103 in ?? () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#13 0x00007ffff7ad3d64 in ?? () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#14 0x00007ffff7ad8d82 in ?? () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#15 0x00007ffff79bf7dd in ?? () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#16 0x00007ffff79c11ed in ruby_exec_node () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#17 0x00007ffff79c330e in ruby_run_node () from /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3
#18 0x000000000040085b in ?? ()
#19 0x00007ffff75ad841 in __libc_start_main (main=0x400810, argc=2, argv=0x7fffffffe5b8, init=<optimized out>, fini=<optimized out>, 
    rtld_fini=<optimized out>, stack_end=0x7fffffffe5a8) at ../csu/libc-start.c:291
#20 0x0000000000400889 in _start ()