diff options
author | Arch Librarian <arch@canonical.com> | 2004-09-20 17:06:06 +0000 |
---|---|---|
committer | Arch Librarian <arch@canonical.com> | 2004-09-20 17:06:06 +0000 |
commit | c33b707e5dbfced74e5dd02f663bc88210ddb94b (patch) | |
tree | 411ba2b0a6fdc698f330ab7d83419866a9afd5c0 | |
parent | 1b48091148e1f423a834d3218dbe024df34932b5 (diff) |
* Implement an ugly workaround for the 10000-character ...
Author: mdz
Date: 2004-03-17 05:58:54 GMT
* Implement an ugly workaround for the 10000-character limit on the
Binaries field in debSrcRecordParser, until such time as some things
can be converted over to use STL data types (ABI change) (Closes: #236688)
* Increase default tagfile buffer from 32k to 128k; this arbitrary limit
should also be removed someday (Closes: #174945)
-rw-r--r-- | apt-pkg/deb/debsrcrecords.cc | 29 | ||||
-rw-r--r-- | apt-pkg/deb/debsrcrecords.h | 4 | ||||
-rw-r--r-- | debian/changelog | 5 |
3 files changed, 32 insertions, 6 deletions
diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc index 639079be3..cac36c2e6 100644 --- a/apt-pkg/deb/debsrcrecords.cc +++ b/apt-pkg/deb/debsrcrecords.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: debsrcrecords.cc,v 1.5 2001/11/04 17:09:18 tausq Exp $ +// $Id: debsrcrecords.cc,v 1.6 2004/03/17 05:58:54 mdz Exp $ /* ###################################################################### Debian Source Package Records - Parser implementation for Debian style @@ -31,13 +31,34 @@ const char **debSrcRecordParser::Binaries() { // This should use Start/Stop too, it is supposed to be efficient after all. string Bins = Sect.FindS("Binary"); - if (Bins.empty() == true || Bins.length() >= sizeof(Buffer)) + if (Bins.empty() == true || Bins.length() >= 102400) return 0; - strcpy(Buffer,Bins.c_str()); - if (TokSplitString(',',Buffer,StaticBinList, + // Workaround for #236688. Only allocate a new buffer if the field + // is large, to avoid a performance penalty + char *BigBuf = NULL; + char *Buf; + if (Bins.length() > sizeof(Buffer)) + { + BigBuf = new char[Bins.length()]; + Buf = BigBuf; + } + else + { + Buf = Buffer; + } + + strcpy(Buf,Bins.c_str()); + if (TokSplitString(',',Buf,StaticBinList, sizeof(StaticBinList)/sizeof(StaticBinList[0])) == false) + { + if (BigBuf != NULL) + delete BigBuf; return 0; + } + + if (BigBuf != NULL) + delete BigBuf; return (const char **)StaticBinList; } /*}}}*/ diff --git a/apt-pkg/deb/debsrcrecords.h b/apt-pkg/deb/debsrcrecords.h index a49734795..f899993df 100644 --- a/apt-pkg/deb/debsrcrecords.h +++ b/apt-pkg/deb/debsrcrecords.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: debsrcrecords.h,v 1.7 2001/11/04 17:09:18 tausq Exp $ +// $Id: debsrcrecords.h,v 1.8 2004/03/17 05:58:54 mdz Exp $ /* ###################################################################### Debian Source Package Records - Parser implementation for Debian style @@ -52,7 +52,7 @@ class debSrcRecordParser : public pkgSrcRecords::Parser debSrcRecordParser(string File,pkgIndexFile const *Index) : Parser(Index), Fd(File,FileFd::ReadOnly), - Tags(&Fd,sizeof(Buffer)) {}; + Tags(&Fd,102400) {}; }; #endif diff --git a/debian/changelog b/debian/changelog index 7d4fd17b0..1fb46ae69 100644 --- a/debian/changelog +++ b/debian/changelog @@ -20,6 +20,11 @@ apt (0.5.24) unstable; urgency=low * In pkgAcquire::Shutdown(), set the status of fetching items to StatError to avoid a sometimes large batch of error messages (Closes: #234685) + * Implement an ugly workaround for the 10000-character limit on the + Binaries field in debSrcRecordParser, until such time as some things + can be converted over to use STL data types (ABI change) (Closes: #236688) + * Increase default tagfile buffer from 32k to 128k; this arbitrary limit + should also be removed someday (Closes: #174945) -- |