[Scummvm-git-logs] scummvm-tools master -> 4a61d92d991d1c20525fa0535e561213113a3190

sev- sev at scummvm.org
Wed Apr 4 23:41:52 CEST 2018


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm-tools' repo located at https://github.com/scummvm/scummvm-tools .

Summary:
4a61d92d99 TOOLS: Fix extract_prince for individual files.


Commit: 4a61d92d991d1c20525fa0535e561213113a3190
    https://github.com/scummvm/scummvm-tools/commit/4a61d92d991d1c20525fa0535e561213113a3190
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2018-04-04T23:40:47+02:00

Commit Message:
TOOLS: Fix extract_prince for individual files.

Apparently our string implementation is buggy, and
String::String(const std::string &str) leads to uninitalized reads

Changed paths:
    engines/prince/extract_prince.cpp
    engines/prince/extract_prince.h


diff --git a/engines/prince/extract_prince.cpp b/engines/prince/extract_prince.cpp
index 7e9ed24..827e1f1 100644
--- a/engines/prince/extract_prince.cpp
+++ b/engines/prince/extract_prince.cpp
@@ -45,7 +45,7 @@ void ExtractPrince::execute() {
 		_outputPath.setFullPath("./");
 	}
 
-	char *pathBuffer = (char *)malloc(17 * sizeof(char));
+	char *pathBuffer = (char *)malloc(100 * sizeof(char));
 	print("Unpacking The Prince and the Coward text data... ");
 
 	std::string databankFullName = mainDir.getFullPath();
@@ -162,18 +162,12 @@ void ExtractPrince::execute() {
 		_fFiles.print("mob.lst\nmob_name - exam text\n");
 
 		int mobFileNumber;
-		for (mobFileNumber = 1; mobFileNumber <= 9; ++mobFileNumber) {
-			if (Common::Filename(mainDir.getFullPath() + Common::String::format("mob0%d.lst", mobFileNumber)).exists() == true) {
+		for (mobFileNumber = 1; mobFileNumber <= 61; ++mobFileNumber) {
+			snprintf(pathBuffer, 100, "mob%02d.lst", mobFileNumber);
+			if (Common::Filename(mainDir.getFullPath() + pathBuffer).exists() == true) {
 				_fFiles.print("%d.\n", mobFileNumber);
-				exportMobs(loadFile(mainDir.getFullPath() + Common::String::format("mob0%d.lst", mobFileNumber)));
-				print("Processing mob0%d.lst", mobFileNumber);
-			}
-		}
-		for (mobFileNumber = 10; mobFileNumber <= 61; ++mobFileNumber) {
-			if (Common::Filename(mainDir.getFullPath() + Common::String::format("mob%d.lst", mobFileNumber)).exists() == true) {
-				_fFiles.print("%d.\n", mobFileNumber);
-				exportMobs(loadFile(mainDir.getFullPath() + Common::String::format("mob%d.lst", mobFileNumber)));
-				print("Processing mob%d.lst...", mobFileNumber);
+				exportMobs(loadFile(mainDir.getFullPath() + pathBuffer));
+				print("Processing mob%02d.lst", mobFileNumber);
 			}
 		}
 		_fFiles.close();
@@ -250,7 +244,7 @@ ExtractPrince::FileData ExtractPrince::loadFile(int itemIndex) {
 	return fileData;
 }
 // Uncompressed datafile loader
-ExtractPrince::FileData ExtractPrince::loadFile(const Common::String &fileName) {
+ExtractPrince::FileData ExtractPrince::loadFile(const std::string &fileName) {
 	Common::File file;
 	file.open(fileName, "rb");
 	if (!file.isOpen()) {
diff --git a/engines/prince/extract_prince.h b/engines/prince/extract_prince.h
index a627457..14c7122 100644
--- a/engines/prince/extract_prince.h
+++ b/engines/prince/extract_prince.h
@@ -28,11 +28,11 @@
 class ExtractPrince : public Tool {
 public:
 	ExtractPrince(const std::string &name = "extract_prince");
-	
+
 	virtual void execute();
-	
+
 	virtual InspectionMatch inspectInput(const Common::Filename &filename);
-	
+
 protected:
 	struct FileEntry {
 		std::string _name;
@@ -49,7 +49,7 @@ protected:
 	static void decrypt(byte *buffer, uint32 size);
 
 	FileData loadFile(int itemIndex);
-	FileData loadFile(const Common::String &fileName);
+	FileData loadFile(const std::string &fileName);
 	char correctPolishLetter(char c);
 
 	void exportMobs(FileData fileData);





More information about the Scummvm-git-logs mailing list