Skip to content

Commit

Permalink
Merge pull request godotengine#21220 from Noshyaar/import-crash
Browse files Browse the repository at this point in the history
Fix crash while importing corrupt wav
  • Loading branch information
akien-mga committed Aug 20, 2018
2 parents 35d232b + ec68822 commit ad8a6b1
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 11 deletions.
24 changes: 14 additions & 10 deletions editor/import/resource_importer_wav.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,15 +157,18 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s
//Consider revision for engine version 3.0
compression_code = file->get_16();
if (compression_code != 1 && compression_code != 3) {
ERR_PRINT("Format not supported for WAVE file (not PCM). Save WAVE files as uncompressed PCM instead.");
break;
file->close();
memdelete(file);
ERR_EXPLAIN("Format not supported for WAVE file (not PCM). Save WAVE files as uncompressed PCM instead.");
ERR_FAIL_V(ERR_INVALID_DATA);
}

format_channels = file->get_16();
if (format_channels != 1 && format_channels != 2) {

ERR_PRINT("Format not supported for WAVE file (not stereo or mono)");
break;
file->close();
memdelete(file);
ERR_EXPLAIN("Format not supported for WAVE file (not stereo or mono).");
ERR_FAIL_V(ERR_INVALID_DATA);
}

format_freq = file->get_32(); //sampling rate
Expand All @@ -174,18 +177,19 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s
file->get_16(); // block align (unused)
format_bits = file->get_16(); // bits per sample

if (format_bits % 8) {

ERR_PRINT("Strange number of bits in sample (not 8,16,24,32)");
break;
if (format_bits % 8 || format_bits == 0) {
file->close();
memdelete(file);
ERR_EXPLAIN("Invalid amount of bits in the sample (should be one of 8, 16, 24 or 32).");
ERR_FAIL_V(ERR_INVALID_DATA);
}

/* Don't need anything else, continue */
format_found = true;
}

if (chunkID[0] == 'd' && chunkID[1] == 'a' && chunkID[2] == 't' && chunkID[3] == 'a' && !data_found) {
/* IS FORMAT CHUNK */
/* IS DATA CHUNK */
data_found = true;

if (!format_found) {
Expand Down
2 changes: 1 addition & 1 deletion servers/audio/effects/audio_effect_record.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ Ref<AudioStreamSample> AudioEffectRecord::get_recording() const {
w[i * 2 + 1] = rr[i];
}
} else {
ERR_EXPLAIN("format not implemented");
ERR_PRINT("Format not implemented.");
}

Ref<AudioStreamSample> sample;
Expand Down

0 comments on commit ad8a6b1

Please sign in to comment.