Skip to Content.
Sympa Menu

freetds - RE: [freetds] Found Segmentation fault causes

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Aliet Santiesteban Sifontes <alietss AT yahoo.com>
  • To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
  • Subject: RE: [freetds] Found Segmentation fault causes
  • Date: Tue, 6 May 2003 20:22:53 -0700 (PDT)

Hi all:
I'll find another cause, the segmentation it happens
too when there are characters like ¡Ü o ¦Õ.
Regards
--- "Lowden, James K" <LowdenJK AT bernstein.com> wrote:
> > From: Aliet Santiesteban Sifontes
> [mailto:alietss AT yahoo.com]
> > Sent: May 6, 2003 12:07 PM
> >
> > I have found the segmentation fault with
> httpd-2.0.45
> > php-4.3.2 freetds-0.62-dev on RedHat 9.0 TDS 7.0
> > against a Microsoft SQL Server 2000, the problem
> is
> > when some of the queries field is of type datetime
> > 8...
> >
> > httpd: read.c:365: tds_get_char_data: Assertion
> > `in_left < 4' failed.
>
> Hi Aliet,
>
> Probably you should just wait. I'm going to modify
> tds_get_char_data()
> (where your assert is stumbling) according to
> Frediano's suggestion, and
> tds_iconv() will look more like iconv(3) with the
> added ability to emit
> client-side error messages. I would be very pleased
> if you'd try my next
> version as soon as it's ready.
>
> What is the assert for?
>
> tds_get_char_data() reads from the wire in 256-byte
> chunks, passing them to
> tds_iconv() for conversion. It makes no attempt to
> ensure the input buffer
> is character-aligned: the tail end of those 256
> bytes might include a
> partial character. (That wouldn't happen in your
> case, because your server
> uses two-byte characters, but it would be possible
> of the server were
> UTF-8.) The largest partial character would be 3
> bytes long, so when
> tds_iconv() is done, absent a logic error, there
> shouldn't be more than
> three unconverted bytes left over in the input
> buffer. Hence the assertion
> that `in_left < 4'.
>
> Unfortunately, logic errors are not absent. The
> output buffer might not be
> big enough (can't tell, not logged). And
> tds_iconv() exits prematurely if
> it encounters an error other than EILSEQ, again
> without logging it.
>
> I'd send you a patch, but since I'm going to redo
> those functions, there's
> no point in acquiring further diagnostics.
>
> If you're really in a jam, you could try removing
> the assert (read.c:365,
> like it says), and removing these lines from the
> while loop in
> src/tds/iconv.c::tds_iconv():
>
> if (errno != EILSEQ)
> break;
>
> You will probably get partial data, so please don't
> try this except as an
> experiment.
>
> Regards,
>
> --jkl
>
>
> The information contained in this transmission may
> contain privileged and
> confidential information and is intended only for
> the use of the person(s)
> named above. If you are not the intended recipient,
> or an employee or agent
> responsible for delivering this message to the
> intended recipient, any
> review, dissemination, distribution or duplication
> of this communication is
> strictly prohibited. If you are not the intended
> recipient, please contact
> the sender immediately by reply e-mail and destroy
> all copies of the
> original message. Please note that we do not accept
> account orders and/or
> instructions by e-mail, and therefore will not be
> responsible for carrying
> out such orders and/or instructions.
>
>
> _______________________________________________
> FreeTDS mailing list
> FreeTDS AT lists.ibiblio.org
> http://lists.ibiblio.org/mailman/listinfo/freetds


__________________________________
Do you Yahoo!?
The New Yahoo! Search - Faster. Easier. Bingo.
http://search.yahoo.com




Archive powered by MHonArc 2.6.24.

Top of Page