Преглед изворни кода

fix: versioned provides in MANIFEST; read_data_block multi-block manifest corruption

clanker пре 1 недеља
родитељ
комит
d639ca024b
2 измењених фајлова са 9 додато и 5 уклоњено
  1. 5 4
      MANIFEST.usm
  2. 4 1
      src/lib/Manifest.vala

+ 5 - 4
MANIFEST.usm

@@ -6,12 +6,13 @@
   "flags": ["ninjaStyleProgress"],
   "flags": ["ninjaStyleProgress"],
   "provides": {
   "provides": {
     "bin:usm": "as-expected",
     "bin:usm": "as-expected",
-    "lib:libusm.so": "as-expected",
-    "inc:usm.h": "as-expected",
-    "vapi:usm.vapi": "as-expected",
+    "lib:libusm-0.1.so": "as-expected",
+    "inc:usm-0.1.h": "as-expected",
+    "vapi:usm-0.1.vapi": "as-expected",
     "typelib:usm-1.0.typelib": "as-expected",
     "typelib:usm-1.0.typelib": "as-expected",
     "gir:usm-1.0.gir": "as-expected",
     "gir:usm-1.0.gir": "as-expected",
-    "pc:usm.pc": "as-expected",
+    "pc:usm-0.1.pc": "as-expected",
+    "libexec:usm-spm-dnf": "as-expected",
     "res:slopdocs/structure.usm.manifest.md": "source:slopdocs/structure.usm.manifest.md",
     "res:slopdocs/structure.usm.manifest.md": "source:slopdocs/structure.usm.manifest.md",
     "res:slopdocs/utility.usm.manifest.validate.md": "source:slopdocs/utility.usm.manifest.validate.md",
     "res:slopdocs/utility.usm.manifest.validate.md": "source:slopdocs/utility.usm.manifest.validate.md",
     "res:slopdocs/structure.usm.manifest.packaging.md": "source:slopdocs/structure.usm.manifest.packaging.md",
     "res:slopdocs/structure.usm.manifest.packaging.md": "source:slopdocs/structure.usm.manifest.packaging.md",

+ 4 - 1
src/lib/Manifest.vala

@@ -114,7 +114,10 @@ namespace Usm {
 				uint8[] buffer;
 				uint8[] buffer;
 				Posix.off_t offset;
 				Posix.off_t offset;
 				while (archive.read_data_block (out buffer, out offset) == Archive.Result.OK) {
 				while (archive.read_data_block (out buffer, out offset) == Archive.Result.OK) {
-					manifest_blob.append_byte_array(buffer[offset:]);
+					// buffer holds just this block; offset is the block's
+					// position within the entry, so slicing would drop every
+					// block after the first.
+					manifest_blob.append_byte_array(buffer);
 				}
 				}
 
 
                 var element = new InvercargillJson.JsonElement.from_string(manifest_blob.to_raw_string());
                 var element = new InvercargillJson.JsonElement.from_string(manifest_blob.to_raw_string());