Bug #81597 [Com]: curl SIGSEGV with PROGRESS

From: Date: Fri, 09 Dec 2022 06:25:29 +0000
Subject: Bug #81597 [Com]: curl SIGSEGV with PROGRESS
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-243081@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81597&edit=1 ID: 81597 Comment by: Burleson212rleson at gmail dot com Reported by: erik at coretech dot se Summary: curl SIGSEGV with PROGRESS Status: Open Type: Bug Package: cURL related PHP Version: 8.0.12 Block user comment: N Private report: N New Comment: You are not sending the userdata to be called. Your download method should be like this: curl_easy_setopt(handle, CURLOPT_PROGRESSFUNCTION, (curl_progress_callback)&myClass::download_progress); curl_easy_setopt(handle, CURLOPT_PROGRESSDATA, this); Also, your download_progress should be marked as static: class myClass{ int percent; ProgressBar bar; public: int download(const char* url, const char* filename, int enable_progress); static int download_progress(void *p, double dl, double dlnow, double ul, double ulnow); }; Thanks, (https://www.kantimemedicare.us/)github.com Previous Comments: ------------------------------------------------------------------------ [2022-11-24 06:45:52] Douglas564ackwell at gmail dot com First up you need to make &myClass::download_progress into a static function and call it simply as: &download_progress (https://www.myherbalife.life/)github.com ------------------------------------------------------------------------ [2021-11-13 06:00:43] camporter1 at gmail dot com An occasional segfault is reproducible for me on rocky linux 8.4 x86_64. Enabled remirepo for 8.0 since php 8.0 isn't provided by the distro. Trace: { "signal": 11 , "executable": "/usr/bin/php" , "stacktrace": [ { "crash_thread": true , "frames": [ { "address": 140011838288336 , "build_id_offset": 140011838288336 } ] } , { "frames": [ { "address": 140011872431189 , "build_id": "296658ed4f68231cb3ef55ded9b584404deed520" , "build_id_offset": 535637 , "function_name": "_int_free" , "file_name": "/lib64/libc.so.6" } , { "address": 94252436834069 , "build_id": "d65e2b1adddfb386f79a94fc816aea6cdf5c5ee5" , "build_id_offset": 2942741 , "function_name": "zend_hash_destroy" , "file_name": "/usr/bin/php" } , { "address": 94252437279985 , "build_id": "d65e2b1adddfb386f79a94fc816aea6cdf5c5ee5" , "build_id_offset": 3388657 , "function_name": "zend_interned_strings_dtor" , "file_name": "/usr/bin/php" } , { "address": 94252436355664 , "build_id": "d65e2b1adddfb386f79a94fc816aea6cdf5c5ee5" , "build_id_offset": 2464336 , "function_name": "php_module_shutdown" , "file_name": "/usr/bin/php" } , { "address": 94252435012844 , "build_id": "d65e2b1adddfb386f79a94fc816aea6cdf5c5ee5" , "build_id_offset": 1121516 , "function_name": "main" , "file_name": "/usr/bin/php" } ] } ] } ------------------------------------------------------------------------ [2021-11-08 09:16:33] erik at coretech dot se curl 7.61.1 (x86_64-redhat-linux-gnu) libcurl/7.61.1 OpenSSL/1.1.1g zlib/1.2.11 brotli/1.0.6 libidn2/2.2.0 libpsl/0.20.2 (+libidn2/2.2.0) libssh/0.9.4/openssl/zlib nghttp2/1.33.0 This is the version shipped with Rocky8 ------------------------------------------------------------------------ [2021-11-08 09:08:42] nikic@php.net I can't reproduce this with libcurl 7.68.0 (no crash or warnings under valgrind). Which version of curl are you using? ------------------------------------------------------------------------ [2021-11-08 09:01:19] erik at coretech dot se Description: ------------ PHP crashes randomly with SIGSEGV (about 1/2 of the times) when the code below is executed. ==805465== Thread 2: ==805465== Jump to the invalid address stated on the next line ==805465== at 0xA08E150: ??? ==805465== by 0x82DC159: start_thread (in /usr/lib64/libpthread-2.28.so) ==805465== by 0x800BDD2: clone (in /usr/lib64/libc-2.28.so) ==805465== Address 0xa08e150 is not stack'd, malloc'd or (recently) free'd ==805465== ==805465== ==805465== Process terminating with default action of signal 11 (SIGSEGV): dumping core ==805465== Access not within mapped region at address 0xA08E150 ==805465== at 0xA08E150: ??? ==805465== by 0x82DC159: start_thread (in /usr/lib64/libpthread-2.28.so) ==805465== by 0x800BDD2: clone (in /usr/lib64/libc-2.28.so) Test script: --------------- <?php class curltest { public function start() { $this->ch = curl_init(); $urlstr = "https://www.php.net/distributions/php-8.0.12.tar.gz"; curl_setopt($this->ch, CURLOPT_URL, $urlstr); curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, FALSE); curl_setopt($this->ch, CURLOPT_WRITEFUNCTION, array($this, 'do_write')); curl_setopt($this->ch, CURLOPT_PROGRESSFUNCTION, array($this, 'do_progress')); curl_setopt($this->ch, CURLOPT_NOPROGRESS, FALSE); curl_setopt($this->ch, CURLOPT_NOSIGNAL, TRUE); $ret = curl_exec($this->ch); } private function do_write($ch, $data) { return strlen($data); } private function do_progress($ch, $a = NULL, $b = NULL, $c = NULL, $d = NULL) { return 1; } } $c = new curltest(); $c->start(); Expected result: ---------------- No crash Actual result: -------------- Crashes with SIGSEGV ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=81597&edit=1

« previous php.bugs (#243081) next »