add contentLength sanity check on rpmdb headerWrite.
authorjbj <devnull@localhost>
Fri, 10 Dec 1999 21:26:58 +0000 (21:26 +0000)
committerjbj <devnull@localhost>
Fri, 10 Dec 1999 21:26:58 +0000 (21:26 +0000)
CVS patchset: 3470
CVS date: 1999/12/10 21:26:58

CHANGES
lib/rpmdb.c
lib/rpmio.h
po/rpm.pot

diff --git a/CHANGES b/CHANGES
index 2b5c744..ffb7f8e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -16,6 +16,7 @@
        - fix: new FILENAMES tags require package index, not pointer in lookups.
        - rename new FILENAMES tags to BASENAMES/DIRNAMES/DIRINDEXES.
        - fix: don't look at password when searching urlCache.
+       - add contentLength sanity check on rpmdb headerWrite.
 
 3.0.2 -> 3.0.3
        - add --eval to find result of macro expansion.
index 68bb18d..89c33e3 100644 (file)
@@ -635,6 +635,7 @@ int rpmdbAdd(rpmdb db, Header dbentry)
     int count = 0, providesCount = 0, requiredbyCount = 0, conflictCount = 0;
     int triggerCount = 0;
     int type;
+    int newSize;
     int rc = 0;
 
     headerGetEntry(dbentry, RPMTAG_NAME, &type, (void **) &name, &count);
@@ -675,13 +676,16 @@ int rpmdbAdd(rpmdb db, Header dbentry)
 
     blockSignals();
 
-    dboffset = fadAlloc(db->pkgs, headerSizeof(dbentry, HEADER_MAGIC_NO));
+    newSize = headerSizeof(dbentry, HEADER_MAGIC_NO);
+    dboffset = fadAlloc(db->pkgs, newSize);
     if (!dboffset) {
        rc = 1;
     } else {
        /* XXX TODO: set max. no. of bytes to write */
        (void)Fseek(db->pkgs, dboffset, SEEK_SET);
+       fdSetContentLength(db->pkgs, newSize);
        rc = headerWrite(db->pkgs, dbentry, HEADER_MAGIC_NO);
+       fdSetContentLength(db->pkgs, -1);
     }
 
     if (rc) {
@@ -739,7 +743,7 @@ exit:
 int rpmdbUpdateRecord(rpmdb db, int offset, Header newHeader)
 {
     Header oldHeader;
-    int oldSize;
+    int oldSize, newSize;
     int rc = 0;
 
     oldHeader = doGetRecord(db, offset, 1);
@@ -755,7 +759,8 @@ int rpmdbUpdateRecord(rpmdb db, int offset, Header newHeader)
     if (_noDirTokens)
        expandFilelist(newHeader);
 
-    if (oldSize != headerSizeof(newHeader, HEADER_MAGIC_NO)) {
+    newSize = headerSizeof(newHeader, HEADER_MAGIC_NO);
+    if (oldSize != newSize) {
        rpmMessage(RPMMESS_DEBUG, _("header changed size!"));
        if (rpmdbRemove(db, offset, 1))
            return 1;
@@ -768,7 +773,9 @@ int rpmdbUpdateRecord(rpmdb db, int offset, Header newHeader)
        /* XXX TODO: set max. no. of bytes to write */
        (void)Fseek(db->pkgs, offset, SEEK_SET);
 
+       fdSetContentLength(db->pkgs, newSize);
        rc = headerWrite(db->pkgs, newHeader, HEADER_MAGIC_NO);
+       fdSetContentLength(db->pkgs, -1);
 
        unblockSignals();
     }
index db73dce..1990840 100644 (file)
@@ -112,6 +112,7 @@ void        fdPop   (FD_t fd);
 
 /*@dependent@*/ /*@null@*/ void *      fdGetFp (FD_t fd);
 void   fdSetFdno(FD_t fd, int fdno);
+void   fdSetContentLength(FD_t fd, ssize_t contentLength);
 off_t  fdSize  (FD_t fd);
 void   fdSetSyserrno(FD_t fd, int syserrno, const void * errcookie);
 
index c69d703..3612065 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 1999-12-10 13:01-0500\n"
+"POT-Creation-Date: 1999-12-10 16:04-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -2838,7 +2838,7 @@ msgstr ""
 msgid "opening database mode 0x%x in %s\n"
 msgstr ""
 
-#: lib/rpmdb.c:157 lib/url.c:457
+#: lib/rpmdb.c:157 lib/url.c:449
 #, c-format
 msgid "failed to open %s: %s\n"
 msgstr ""
@@ -2922,16 +2922,16 @@ msgstr ""
 msgid "package has no files\n"
 msgstr ""
 
-#: lib/rpmdb.c:688
+#: lib/rpmdb.c:692
 msgid "cannot allocate space for database"
 msgstr ""
 
-#: lib/rpmdb.c:747
+#: lib/rpmdb.c:751
 #, c-format
 msgid "cannot read header at %d for update"
 msgstr ""
 
-#: lib/rpmdb.c:759
+#: lib/rpmdb.c:764
 msgid "header changed size!"
 msgstr ""
 
@@ -3032,59 +3032,59 @@ msgstr ""
 msgid "Installing %s\n"
 msgstr ""
 
-#: lib/rpmio.c:763
+#: lib/rpmio.c:769
 msgid "Success"
 msgstr ""
 
-#: lib/rpmio.c:766
+#: lib/rpmio.c:772
 msgid "Bad server response"
 msgstr ""
 
-#: lib/rpmio.c:769
+#: lib/rpmio.c:775
 msgid "Server IO error"
 msgstr ""
 
-#: lib/rpmio.c:772
+#: lib/rpmio.c:778
 msgid "Server timeout"
 msgstr ""
 
-#: lib/rpmio.c:775
+#: lib/rpmio.c:781
 msgid "Unable to lookup server host address"
 msgstr ""
 
-#: lib/rpmio.c:778
+#: lib/rpmio.c:784
 msgid "Unable to lookup server host name"
 msgstr ""
 
-#: lib/rpmio.c:781
+#: lib/rpmio.c:787
 msgid "Failed to connect to server"
 msgstr ""
 
-#: lib/rpmio.c:784
+#: lib/rpmio.c:790
 msgid "Failed to establish data connection to server"
 msgstr ""
 
-#: lib/rpmio.c:787
+#: lib/rpmio.c:793
 msgid "IO error to local file"
 msgstr ""
 
-#: lib/rpmio.c:790
+#: lib/rpmio.c:796
 msgid "Error setting remote server to passive mode"
 msgstr ""
 
-#: lib/rpmio.c:793
+#: lib/rpmio.c:799
 msgid "File not found on server"
 msgstr ""
 
-#: lib/rpmio.c:796
+#: lib/rpmio.c:802
 msgid "Abort in progress"
 msgstr ""
 
-#: lib/rpmio.c:800
+#: lib/rpmio.c:806
 msgid "Unknown or unexpected error"
 msgstr ""
 
-#: lib/rpmio.c:1323
+#: lib/rpmio.c:1329
 #, c-format
 msgid "logging into %s as %s, pw %s\n"
 msgstr ""
@@ -3398,22 +3398,22 @@ msgstr ""
 msgid "warning: uCache[%d] %p nrefs(%d) != 1 (%s %s)\n"
 msgstr ""
 
-#: lib/url.c:232
+#: lib/url.c:225
 #, c-format
 msgid "Password for %s@%s: "
 msgstr ""
 
-#: lib/url.c:258 lib/url.c:284
+#: lib/url.c:250 lib/url.c:276
 #, c-format
 msgid "error: %sport must be a number\n"
 msgstr ""
 
-#: lib/url.c:421
+#: lib/url.c:413
 msgid "url port must be a number\n"
 msgstr ""
 
 #. XXX Fstrerror
-#: lib/url.c:480
+#: lib/url.c:472
 #, c-format
 msgid "failed to create %s: %s\n"
 msgstr ""