                                  _   _ ____  _
                              ___| | | |  _ \| |
                             / __| | | | |_) | |
                            | (__| |_| |  _ <| |___
                             \___|\___/|_| \_\_____|

BUGS

 1. Bugs
  1.1 There are still bugs
  1.2 Where to report
  1.3 What to report
  1.4 libcurl problems
  1.5 Who will fix the problems
  1.6 How to get a stack trace
  1.7 Bugs in libcurl bindings

 2. Bug fixing procedure
 2.1 What happens on first filing
 2.2 First response
 2.3 Not reproducible
 2.4 Unresponsive
 2.5 Lack of time/interest
 2.6 KNOWN_BUGS
 2.7 TODO
 2.8 Closing off stalled bugs

==============================================================================

1.1 There are still bugs

  Curl and libcurl have grown substantially since the beginning. At the time
  of writing (January 2013), there are about 83,000 lines of source code, and
  by the time you read this it has probably grown even more.

  Of course there are lots of bugs left. And lots of misfeatures.

  To help us make curl the stable and solid product we want it to be, we need
  bug reports and bug fixes.

1.2 Where to report

  If you can't fix a bug yourself and submit a fix for it, try to report an as
  detailed report as possible to a curl mailing list to allow one of us to
  have a go at a solution. You can optionally also post your bug/problem at
  curl's bug tracking system over at

        https://github.com/curl/curl/issues

  Please read the rest of this document below first before doing that!

  If you feel you need to ask around first, find a suitable mailing list and
  post there. The lists are available on https://curl.haxx.se/mail/

1.3 What to report

  When reporting a bug, you should include all information that will help us
  understand what's wrong, what you expected to happen and how to repeat the
  bad behavior. You therefore need to tell us:

   - your operating system's name and version number

   - what version of curl you're using (curl -V is fine)

   - versions of the used libraries that libcurl is built to use

   - what URL you were working with (if possible), at least which protocol

  and anything and everything else you think matters. Tell us what you
  expected to happen, tell use what did happen, tell us how you could make it
  work another way. Dig around, try out, test. Then include all the tiny bits
  and pieces in your report. You will benefit from this yourself, as it will
  enable us to help you quicker and more accurately.

  Since curl deals with networks, it often helps us if you include a protocol
  debug dump with your bug report. The output you get by using the -v or
  --trace options.

  If curl crashed, causing a core dump (in unix), there is hardly any use to
  send that huge file to anyone of us. Unless we have an exact same system
  setup as you, we can't do much with it. Instead we ask you to get a stack
  trace and send that (much smaller) output to us instead!

  The address and how to subscribe to the mailing lists are detailed in the
  MANUAL file.

1.4 libcurl problems

  When you've written your own application with libcurl to perform transfers,
  it is even more important to be specific and detailed when reporting bugs.

  Tell us the libcurl version and your operating system. Tell us the name and
  version of all relevant sub-components like for example the SSL library
  you're using and what name resolving your libcurl uses. If you use SFTP or
  SCP, the libssh2 version is relevant etc.

  Showing us a real source code example repeating your problem is the best way
  to get our attention and it will greatly increase our chances to understand
  your problem and to work on a fix (if we agree it truly is a problem).

  Lots of problems that appear to be libcurl problems are actually just abuses
  of the libcurl API or other malfunctions in your applications. It is advised
  that you run your problematic program using a memory debug tool like
  valgrind or similar before you post memory-related or "crashing" problems to
  us.

1.5 Who will fix the problems

  If the problems or bugs you describe are considered to be bugs, we want to
  have the problems fixed.

  There are no developers in the curl project that are paid to work on bugs.
  All developers that take on reported bugs do this on a voluntary basis. We
  do it out of an ambition to keep curl and libcurl excellent products and out
  of pride.

  But please do not assume that you can just lump over something to us and it
  will then magically be fixed after some given time. Most often we need
  feedback and help to understand what you've experienced and how to repeat a
  problem. Then we may only be able to assist YOU to debug the problem and to
  track down the proper fix.

  We get reports from many people every month and each report can take a
  considerable amount of time to really go to the bottom with.

1.6 How to get a stack trace

  First, you must make sure that you compile all sources with -g and that you
  don't 'strip' the final executable. Try to avoid optimizing the code as
  well, remove -O, -O2 etc from the compiler options.

  Run the program until it cores.

  Run your debugger on the core file, like '<debugger> curl core'. <debugger>
  should be replaced with the name of your debugger, in most cases that will
  be 'gdb', but 'dbx' and others also occur.

  When the debugger has finished loading the core file and presents you a
  prompt, enter 'where' (without the quotes) and press return.

  The list that is presented is the stack trace. If everything worked, it is
  supposed to contain the chain of functions that were called when curl
  crashed. Include the stack trace with your detailed bug report. It'll help a
  lot.

1.7 Bugs in libcurl bindings

  There will of course pop up bugs in libcurl bindings. You should then
  primarily approach the team that works on that particular binding and see
  what you can do to help them fix the problem.

  If you suspect that the problem exists in the underlying libcurl, then
  please convert your program over to plain C and follow the steps outlined
  above.

2. Bug fixing procedure

2.1 What happens on first filing

  When a new issue is posted in the issue tracker or on the mailing list, the
  team of developers first need to see the report. Maybe they took the day
  off, maybe they're off in the woods hunting. Have patience. Allow at least a
  few days before expecting someone to have responded.

  In the issue tracker you can expect that some labels will be set on the
  issue to help categorize it.

2.2 First response

  If your issue/bug report wasn't perfect at once (and few are), chances are
  that someone will ask follow-up questions. Which version did you use? Which
  options did you use? How often does the problem occur? How can we reproduce
  this problem? Which protocols does it involve? Or perhaps much more specific
  and deep diving questions. It all depends on your specific issue.

  You should then respond to these follow-up questions and provide more info
  about the problem, so that we can help you figure it out. Or maybe you can
  help us figure it out. An active back-and-forth communication is important
  and the key for finding a cure and landing a fix.

2.3 Not reproducible

  For problems that we can't reproduce and can't understand even after having
  gotten all the info we need and having studied the source code over again,
  are really hard to solve so then we may require further work from you who
  actually see or experience the problem.

2.4 Unresponsive

  If the problem haven't been understood or reproduced, and there's nobody
  responding to follow-up questions or questions asking for clarifications or
  for discussing possible ways to move forward with the task, we take that as
  a strong suggestion that the bug is not important.

  Unimportant issues will be closed as inactive sooner or later as they can't
  be fixed. The inactivity period (waiting for responses) should not be
  shorter than two weeks but may extend months.

2.5 Lack of time/interest

  Bugs that are filed and are understood can unfortunately end up in the
  "nobody cares enough about it to work on it" category. Such bugs are
  perfectly valid problems that *should* get fixed but apparently aren't. We
  try to mark such bugs as "KNOWN_BUGS material" after a time of inactivity
  and if no activity is noticed after yet some time those bugs are added to
  KNOWN_BUGS and are closed in the issue tracker.

2.6 KNOWN_BUGS

  This is a list of known bugs. Bugs we know exist and that have been pointed
  out but that haven't yet been fixed. The reasons for why they haven't been
  fixed can involve anything really, but the primary reason is that nobody has
  considered these problems to be important enough to spend the necesary time
  and effort to have them fixed.

  The KNOWN_BUGS are always up for grabs and we will always love the ones who
  bring one of them back to live and offers solutions to them.

  The KNOWN_BUGS document has a sibling document known as TODO.

2.7 TODO

  Issues that are filed or reported that aren't really bugs but more missing
  features or ideas for future improvements and so on are marked as
  'enhancement' or 'feature-request' and will be added to the TODO document
  instead and the issue is closed. We don't keep TODO items in the issue
  tracker.

  The TODO document is full of ideas and suggestions of what we can add or fix
  one day. You're always encouraged and free to grab one of those items and
  take up a discussion with the curl development team on how that could be
  implemented or provided in the project so that you can work on ticking it
  odd that document.

  If the issue is rather a bug and not a missing feature or functionality, it
  is listed in KNOWN_BUGS instead.

2.8 Closing off stalled bugs

  The issue and pull request trackers on https://github.com/curl/curl will
  only hold "active" entries (using a non-precise defintion of what active
  actually is, but they're at least not completely dead). Those that are
  abandonded or in other ways dormant will be closed and sometimes added to
  TODO and KNOWN_BUGS instead.

  This way, we only have "active" issues open on github. Irrelevant issues and
  pull requests will not distract developes or casual visitors.
