[sword-devel] SWBuf potential problem

DM Smith dmsmith555 at yahoo.com
Fri Jun 10 12:55:58 MST 2005


It has been a long time since I have coded in C++ but I seem to remember 
that a program can set a global memory error handler. Then this error 
can do something marginally appropriate for the problem. In our 
situation, we used it to try to log a short static message and exit the 
program.

When we had this in place we never checked the return of any object 
allocation.

Daniel Glassey wrote:

>On 10/06/05, Troy A. Griffitts <scribe at crosswire.org> wrote:
>  
>
>>Hey Daniel,
>>        Thanks for the catch, but we don't check for successful memory
>>allocation anywhere in the engine.  I'm not sure what we'd do if we ran
>>out of memory.  Gracefully degradating from such a state is a complex
>>problem.  Also, our engine doesn't use try/catch/throw error handling,
>>so throwing anything would cross a consistency line.  Note: not debating
>>that we SHOULDN'T use exception error handling, only that we currently
>>do not.
>>    
>>
>
>Fair enough to not throw as long as it does something. It is one thing
>to not check and another thing to allow someone to overwrite bits of
>memory that they shouldn't.
> 
>The *end = 0; is a _really_ bad idea if you aren't certain that that
>memory has been allocated.
>
>d
>
>
>  
>
>>Daniel Glassey wrote:
>>    
>>
>>>Hi,
>>>While encountering other problems on my machine I've found a potential
>>>problem with SWBuf::assureSize.
>>>
>>>It reallocs or mallocs the buffer but doesn't check that that has
>>>succeeded before setting the 'end' of the buffer to 0.
>>>
>>>Patch attached that does a check. Thought I'd just check before checking it in.
>>>
>>>Regards,
>>>Daniel
>>>
>>>
>>>------------------------------------------------------------------------
>>>
>>>Index: include/swbuf.h
>>>===================================================================
>>>--- include/swbuf.h   (revision 1827)
>>>+++ include/swbuf.h   (working copy)
>>>@@ -58,6 +58,7 @@
>>>                      long size = (end - buf);
>>>                      checkSize += 128;
>>>                      buf = (char *)((allocSize) ? realloc(buf, checkSize) : malloc(checkSize));
>>>+                     if (!buf) throw("Failed to extend SWBuf buffer");
>>>                      allocSize = checkSize;
>>>                      end = (buf + size);
>>>                      *end = 0;
>>>      
>>>
>
>_______________________________________________
>sword-devel mailing list: sword-devel at crosswire.org
>http://www.crosswire.org/mailman/listinfo/sword-devel
>Instructions to unsubscribe/change your settings at above page
>
>  
>


More information about the sword-devel mailing list