Quicken 2000 issues/Category getting blanked with memo

Carl Sopchak carl.sopchak at cegis123.com
Tue Aug 13 15:51:16 CDT 2002


On Monday, August 05, 2002 10:54 am, Aric wrote:
> On Monday, August 05, 2002 09:25 am, Carl wrote:
> > Using an account register, I was entering a transaction.  I entered the 
> > date <tab>, <tab> (skipping check #), Payee <tab>, Payment Amount <tab>,
> > transfer account <tab>, memo.  At this point, pressing <ctrl><Enter>
> > should save the transaction.  However, when I pressed <ctrl><Enter>, the
> > Transfer Account got cleared, then I was asked if the program should save
> > the transaction anyway.  The Transfer Account does NOT get cleared if the
> > <ctrl><Enter> is pressed while the cursor is in that field.
>
> Ah you have reported the bug that has sucked away far too many days of
> my time to no avail. 
> For some reason I have yet to determine. If you select the memo field
> then the Category field gets cleared.

Well, after a day of wading through a whole lot of --debugmsg +all logs, I've 
figured out what's going on with this...

EDIT_WM_GetText (in controls/edit.c) is "blindly" setting the last byte of the 
string buffer being past to it to NULL:

        textA[count - 1] = 0; /* ensure 0 termination */

Apparently, in this particular case, the buffer size (the 'count' veriable) is 
not correct, and the location of textA[count - 1] just happens to correspond 
to the first byte of the Category field, which (obviously) CHANGES IT TO A 
NULL STRING!  Voila!

Now, since I have just found this, I have not had a chance to determine of the 
erroneous value of "count" is a bug in Wine, or in Quicken!  Doing so may 
take an awfully loooooong time, particularly since I don't have the source 
for Quicken.  (Since this does not seem to be a pervasive bug, I'm suspecting 
Quicken...)

So, here's what I see as my choices...

1)  Forget the origin of the bug, and change EDIT_WM_GetText to only set the 
last byte to a NULL only if there is not a NULL byte prior to [count - 1].  
I'm guessing the most efficient way (I'm no C guru) would be to change the 
line to something like:
	if (strlen(textA) >= count) textA[count - 1] = 0;
If this is reasonable, the question that I would have is "What functions 
should I use in place of the strlen() above [for A and W strings] (or is 
strlen() good enough for both)?"

2)  Take some time to try to track down if the bug is Wine related.  I'm 
willing to spend a day (maybe two) on this, but my gut tells me it's futile.  
Obviously, if I find a related Wine bug, I'd fix it, which indirectly would 
fix this issue.  But if I don't find a related bug, I guess I would have to 
revert to (1) anyway...

Suggestions??  Comments??

Carl



More information about the wine-devel mailing list