From 1e31edc0c06e5fc5f24b4954eeb01db8b04bb4de Mon Sep 17 00:00:00 2001 From: "rosenfield.albert" Date: Tue, 27 May 2008 14:16:36 +0000 Subject: [PATCH] Sanity check: assert that row buffer length is not exceeded at a proper time, instead of dereferencing a broken pointer later on, which has random consequences (given that range checking is off). --- components/zeosdbo/src/dbc/ZDbcCache.pas | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/zeosdbo/src/dbc/ZDbcCache.pas b/components/zeosdbo/src/dbc/ZDbcCache.pas index 8cec2782..38c3cd89 100644 --- a/components/zeosdbo/src/dbc/ZDbcCache.pas +++ b/components/zeosdbo/src/dbc/ZDbcCache.pas @@ -231,6 +231,10 @@ begin FColumnLengths[I] := GetColumnSize(Current); FColumnOffsets[I] := FColumnsSize; Inc(FColumnsSize, FColumnLengths[I] + 1); + // 32768 is the length of a TByteArray. + if FColumnsSize > 32767 then begin + raise Exception.Create('Zeos: Row buffer width exceeded.\nTry using fewer or longer columns in SQL query.'); + end; FHasBlobs := FHasBlobs or (FColumnTypes[I] in [stAsciiStream, stUnicodeStream, stBinaryStream]); end;