[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