lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | _ _ ____ _ |
| 2 | ___| | | | _ \| | |
| 3 | / __| | | | |_) | | |
| 4 | | (__| |_| | _ <| |___ |
| 5 | \___|\___/|_| \_\_____| |
| 6 | |
| 7 | BUGS |
| 8 | |
| 9 | 1. Bugs |
| 10 | 1.1 There are still bugs |
| 11 | 1.2 Where to report |
| 12 | 1.3 What to report |
| 13 | 1.4 libcurl problems |
| 14 | 1.5 Who will fix the problems |
| 15 | 1.6 How to get a stack trace |
| 16 | 1.7 Bugs in libcurl bindings |
| 17 | 1.8 Bugs in old versions |
| 18 | |
| 19 | 2. Bug fixing procedure |
| 20 | 2.1 What happens on first filing |
| 21 | 2.2 First response |
| 22 | 2.3 Not reproducible |
| 23 | 2.4 Unresponsive |
| 24 | 2.5 Lack of time/interest |
| 25 | 2.6 KNOWN_BUGS |
| 26 | 2.7 TODO |
| 27 | 2.8 Closing off stalled bugs |
| 28 | |
| 29 | ============================================================================== |
| 30 | |
| 31 | 1.1 There are still bugs |
| 32 | |
| 33 | Curl and libcurl have grown substantially since the beginning. At the time |
| 34 | of writing (January 2013), there are about 83,000 lines of source code, and |
| 35 | by the time you read this it has probably grown even more. |
| 36 | |
| 37 | Of course there are lots of bugs left. And lots of misfeatures. |
| 38 | |
| 39 | To help us make curl the stable and solid product we want it to be, we need |
| 40 | bug reports and bug fixes. |
| 41 | |
| 42 | 1.2 Where to report |
| 43 | |
| 44 | If you can't fix a bug yourself and submit a fix for it, try to report an as |
| 45 | detailed report as possible to a curl mailing list to allow one of us to |
| 46 | have a go at a solution. You can optionally also post your bug/problem at |
| 47 | curl's bug tracking system over at |
| 48 | |
| 49 | https://github.com/curl/curl/issues |
| 50 | |
| 51 | Please read the rest of this document below first before doing that! |
| 52 | |
| 53 | If you feel you need to ask around first, find a suitable mailing list and |
| 54 | post there. The lists are available on https://curl.haxx.se/mail/ |
| 55 | |
| 56 | 1.3 What to report |
| 57 | |
| 58 | When reporting a bug, you should include all information that will help us |
| 59 | understand what's wrong, what you expected to happen and how to repeat the |
| 60 | bad behavior. You therefore need to tell us: |
| 61 | |
| 62 | - your operating system's name and version number |
| 63 | |
| 64 | - what version of curl you're using (curl -V is fine) |
| 65 | |
| 66 | - versions of the used libraries that libcurl is built to use |
| 67 | |
| 68 | - what URL you were working with (if possible), at least which protocol |
| 69 | |
| 70 | and anything and everything else you think matters. Tell us what you |
| 71 | expected to happen, tell use what did happen, tell us how you could make it |
| 72 | work another way. Dig around, try out, test. Then include all the tiny bits |
| 73 | and pieces in your report. You will benefit from this yourself, as it will |
| 74 | enable us to help you quicker and more accurately. |
| 75 | |
| 76 | Since curl deals with networks, it often helps us if you include a protocol |
| 77 | debug dump with your bug report. The output you get by using the -v or |
| 78 | --trace options. |
| 79 | |
| 80 | If curl crashed, causing a core dump (in unix), there is hardly any use to |
| 81 | send that huge file to anyone of us. Unless we have an exact same system |
| 82 | setup as you, we can't do much with it. Instead we ask you to get a stack |
| 83 | trace and send that (much smaller) output to us instead! |
| 84 | |
| 85 | The address and how to subscribe to the mailing lists are detailed in the |
| 86 | MANUAL file. |
| 87 | |
| 88 | 1.4 libcurl problems |
| 89 | |
| 90 | When you've written your own application with libcurl to perform transfers, |
| 91 | it is even more important to be specific and detailed when reporting bugs. |
| 92 | |
| 93 | Tell us the libcurl version and your operating system. Tell us the name and |
| 94 | version of all relevant sub-components like for example the SSL library |
| 95 | you're using and what name resolving your libcurl uses. If you use SFTP or |
| 96 | SCP, the libssh2 version is relevant etc. |
| 97 | |
| 98 | Showing us a real source code example repeating your problem is the best way |
| 99 | to get our attention and it will greatly increase our chances to understand |
| 100 | your problem and to work on a fix (if we agree it truly is a problem). |
| 101 | |
| 102 | Lots of problems that appear to be libcurl problems are actually just abuses |
| 103 | of the libcurl API or other malfunctions in your applications. It is advised |
| 104 | that you run your problematic program using a memory debug tool like |
| 105 | valgrind or similar before you post memory-related or "crashing" problems to |
| 106 | us. |
| 107 | |
| 108 | 1.5 Who will fix the problems |
| 109 | |
| 110 | If the problems or bugs you describe are considered to be bugs, we want to |
| 111 | have the problems fixed. |
| 112 | |
| 113 | There are no developers in the curl project that are paid to work on bugs. |
| 114 | All developers that take on reported bugs do this on a voluntary basis. We |
| 115 | do it out of an ambition to keep curl and libcurl excellent products and out |
| 116 | of pride. |
| 117 | |
| 118 | But please do not assume that you can just lump over something to us and it |
| 119 | will then magically be fixed after some given time. Most often we need |
| 120 | feedback and help to understand what you've experienced and how to repeat a |
| 121 | problem. Then we may only be able to assist YOU to debug the problem and to |
| 122 | track down the proper fix. |
| 123 | |
| 124 | We get reports from many people every month and each report can take a |
| 125 | considerable amount of time to really go to the bottom with. |
| 126 | |
| 127 | 1.6 How to get a stack trace |
| 128 | |
| 129 | First, you must make sure that you compile all sources with -g and that you |
| 130 | don't 'strip' the final executable. Try to avoid optimizing the code as |
| 131 | well, remove -O, -O2 etc from the compiler options. |
| 132 | |
| 133 | Run the program until it cores. |
| 134 | |
| 135 | Run your debugger on the core file, like '<debugger> curl core'. <debugger> |
| 136 | should be replaced with the name of your debugger, in most cases that will |
| 137 | be 'gdb', but 'dbx' and others also occur. |
| 138 | |
| 139 | When the debugger has finished loading the core file and presents you a |
| 140 | prompt, enter 'where' (without the quotes) and press return. |
| 141 | |
| 142 | The list that is presented is the stack trace. If everything worked, it is |
| 143 | supposed to contain the chain of functions that were called when curl |
| 144 | crashed. Include the stack trace with your detailed bug report. It'll help a |
| 145 | lot. |
| 146 | |
| 147 | 1.7 Bugs in libcurl bindings |
| 148 | |
| 149 | There will of course pop up bugs in libcurl bindings. You should then |
| 150 | primarily approach the team that works on that particular binding and see |
| 151 | what you can do to help them fix the problem. |
| 152 | |
| 153 | If you suspect that the problem exists in the underlying libcurl, then |
| 154 | please convert your program over to plain C and follow the steps outlined |
| 155 | above. |
| 156 | |
| 157 | 1.8 Bugs in old versions |
| 158 | |
| 159 | The curl project typically releases new versions every other month, and we |
| 160 | fix several hundred bugs per year. For a huge table of releases, number of |
| 161 | bug fixes and more, see: https://curl.haxx.se/docs/releases.html |
| 162 | |
| 163 | The developers in the curl project do not have bandwidth or energy enough to |
| 164 | maintain several branches or to spend much time on hunting down problems in |
| 165 | old versions when chances are we already fixed them or at least that they've |
| 166 | changed nature and appearance in later versions. |
| 167 | |
| 168 | When you experience a problem and want to report it, you really SHOULD |
| 169 | include the version number of the curl you're using when you experience the |
| 170 | issue. If that version number shows us that you're using an out-of-date |
| 171 | curl, you should also try out a modern curl version to see if the problem |
| 172 | persists or how/if it has changed in apperance. |
| 173 | |
| 174 | Even if you cannot immediately upgrade your application/system to run the |
| 175 | latest curl version, you can most often at least run a test version or |
| 176 | experimental build or similar, to get this confirmed or not. |
| 177 | |
| 178 | At times people insist that they cannot upgrade to a modern curl version, |
| 179 | but instead they "just want the bug fixed". That's fine, just don't count on |
| 180 | us spending many cycles on trying to identify which single commit, if that's |
| 181 | even possible, that at some point in the past fixed the problem you're now |
| 182 | experiencing. |
| 183 | |
| 184 | Security wise, it is almost always a bad idea to lag behind the current curl |
| 185 | versions by a lot. We keeping discovering and reporting security problems |
| 186 | over time see you can see in this table: |
| 187 | https://curl.haxx.se/docs/vulnerabilities.html |
| 188 | |
| 189 | 2. Bug fixing procedure |
| 190 | |
| 191 | 2.1 What happens on first filing |
| 192 | |
| 193 | When a new issue is posted in the issue tracker or on the mailing list, the |
| 194 | team of developers first need to see the report. Maybe they took the day |
| 195 | off, maybe they're off in the woods hunting. Have patience. Allow at least a |
| 196 | few days before expecting someone to have responded. |
| 197 | |
| 198 | In the issue tracker you can expect that some labels will be set on the |
| 199 | issue to help categorize it. |
| 200 | |
| 201 | 2.2 First response |
| 202 | |
| 203 | If your issue/bug report wasn't perfect at once (and few are), chances are |
| 204 | that someone will ask follow-up questions. Which version did you use? Which |
| 205 | options did you use? How often does the problem occur? How can we reproduce |
| 206 | this problem? Which protocols does it involve? Or perhaps much more specific |
| 207 | and deep diving questions. It all depends on your specific issue. |
| 208 | |
| 209 | You should then respond to these follow-up questions and provide more info |
| 210 | about the problem, so that we can help you figure it out. Or maybe you can |
| 211 | help us figure it out. An active back-and-forth communication is important |
| 212 | and the key for finding a cure and landing a fix. |
| 213 | |
| 214 | 2.3 Not reproducible |
| 215 | |
| 216 | For problems that we can't reproduce and can't understand even after having |
| 217 | gotten all the info we need and having studied the source code over again, |
| 218 | are really hard to solve so then we may require further work from you who |
| 219 | actually see or experience the problem. |
| 220 | |
| 221 | 2.4 Unresponsive |
| 222 | |
| 223 | If the problem haven't been understood or reproduced, and there's nobody |
| 224 | responding to follow-up questions or questions asking for clarifications or |
| 225 | for discussing possible ways to move forward with the task, we take that as |
| 226 | a strong suggestion that the bug is not important. |
| 227 | |
| 228 | Unimportant issues will be closed as inactive sooner or later as they can't |
| 229 | be fixed. The inactivity period (waiting for responses) should not be |
| 230 | shorter than two weeks but may extend months. |
| 231 | |
| 232 | 2.5 Lack of time/interest |
| 233 | |
| 234 | Bugs that are filed and are understood can unfortunately end up in the |
| 235 | "nobody cares enough about it to work on it" category. Such bugs are |
| 236 | perfectly valid problems that *should* get fixed but apparently aren't. We |
| 237 | try to mark such bugs as "KNOWN_BUGS material" after a time of inactivity |
| 238 | and if no activity is noticed after yet some time those bugs are added to |
| 239 | KNOWN_BUGS and are closed in the issue tracker. |
| 240 | |
| 241 | 2.6 KNOWN_BUGS |
| 242 | |
| 243 | This is a list of known bugs. Bugs we know exist and that have been pointed |
| 244 | out but that haven't yet been fixed. The reasons for why they haven't been |
| 245 | fixed can involve anything really, but the primary reason is that nobody has |
| 246 | considered these problems to be important enough to spend the necessary time |
| 247 | and effort to have them fixed. |
| 248 | |
| 249 | The KNOWN_BUGS are always up for grabs and we will always love the ones who |
| 250 | bring one of them back to live and offers solutions to them. |
| 251 | |
| 252 | The KNOWN_BUGS document has a sibling document known as TODO. |
| 253 | |
| 254 | 2.7 TODO |
| 255 | |
| 256 | Issues that are filed or reported that aren't really bugs but more missing |
| 257 | features or ideas for future improvements and so on are marked as |
| 258 | 'enhancement' or 'feature-request' and will be added to the TODO document |
| 259 | instead and the issue is closed. We don't keep TODO items in the issue |
| 260 | tracker. |
| 261 | |
| 262 | The TODO document is full of ideas and suggestions of what we can add or fix |
| 263 | one day. You're always encouraged and free to grab one of those items and |
| 264 | take up a discussion with the curl development team on how that could be |
| 265 | implemented or provided in the project so that you can work on ticking it |
| 266 | odd that document. |
| 267 | |
| 268 | If the issue is rather a bug and not a missing feature or functionality, it |
| 269 | is listed in KNOWN_BUGS instead. |
| 270 | |
| 271 | 2.8 Closing off stalled bugs |
| 272 | |
| 273 | The issue and pull request trackers on https://github.com/curl/curl will |
| 274 | only hold "active" entries (using a non-precise definition of what active |
| 275 | actually is, but they're at least not completely dead). Those that are |
| 276 | abandonded or in other ways dormant will be closed and sometimes added to |
| 277 | TODO and KNOWN_BUGS instead. |
| 278 | |
| 279 | This way, we only have "active" issues open on github. Irrelevant issues and |
| 280 | pull requests will not distract developes or casual visitors. |