Skip to content

Commit a1fb837

Browse files
committed
Added checks on nodes, patches, textures and streams
1 parent 1b9c216 commit a1fb837

1 file changed

Lines changed: 16 additions & 10 deletions

File tree

src/nxsedit/extractor.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ void Extractor::save(QString output, nx::Signature &signature) {
156156
header.n_patches = patches.size();
157157
header.n_textures = textures.size();
158158

159-
160159
quint64 size = sizeof(nx::Header) +
161160
nodes.size()*sizeof(nx::Node) +
162161
patches.size()*sizeof(nx::Patch) +
@@ -170,9 +169,12 @@ void Extractor::save(QString output, nx::Signature &signature) {
170169
//TODO should actually remove textures not used anymore.
171170

172171
file.write((char *)&header, sizeof(header));
173-
file.write((char *)&*nodes.begin(), sizeof(nx::Node)*nodes.size());
174-
file.write((char *)&*patches.begin(), sizeof(nx::Patch)*patches.size());
175-
file.write((char *)&*textures.begin(), sizeof(nx::Texture)*textures.size());
172+
if(!nodes.empty())
173+
file.write((char *)&*nodes.begin(), sizeof(nx::Node)*nodes.size());
174+
if(!patches.empty())
175+
file.write((char *)&*patches.begin(), sizeof(nx::Patch)*patches.size());
176+
if(!textures.empty())
177+
file.write((char *)&*textures.begin(), sizeof(nx::Texture)*textures.size());
176178
file.seek(size);
177179

178180
for(uint i = 0; i < node_remap.size()-1; i++) {
@@ -224,9 +226,12 @@ void Extractor::save(QString output, nx::Signature &signature) {
224226
}
225227

226228
file.seek(sizeof(nx::Header));
227-
file.write((char *)&*nodes.begin(), sizeof(nx::Node)*nodes.size());
228-
file.write((char *)&*patches.begin(), sizeof(nx::Patch)*patches.size());
229-
file.write((char *)&*textures.begin(), sizeof(nx::Texture)*textures.size());
229+
if(!nodes.empty())
230+
file.write((char *)&*nodes.begin(), sizeof(nx::Node)*nodes.size());
231+
if(!patches.empty())
232+
file.write((char *)&*patches.begin(), sizeof(nx::Patch)*patches.size());
233+
if(!textures.empty())
234+
file.write((char *)&*textures.begin(), sizeof(nx::Texture)*textures.size());
230235
file.close();
231236
}
232237

@@ -285,7 +290,8 @@ void Extractor::compress(QFile &file, nx::Signature &signature, nx::Node &node,
285290
//cout << "C size: " << coder.color_size << endl;
286291
//cout << "I size: " << coder.face_size << endl;
287292

288-
file.write((char *)&*coder.stream.buffer, coder.stream.size());
293+
if(coder.stream.size() > 0)
294+
file.write((char *)&*coder.stream.buffer, coder.stream.size());
289295
//padding
290296
quint64 size = pad(file.pos()) - file.pos();
291297
char tmp[NEXUS_PADDING];
@@ -349,8 +355,8 @@ void Extractor::compress(QFile &file, nx::Signature &signature, nx::Node &node,
349355
//cout << "Face bpv; " << 8.0f*encoder.index.size/nvert << " size: " << encoder.index.size << endl; */
350356

351357

352-
353-
file.write((char *)&*encoder.stream.data(), encoder.stream.size());
358+
if(encoder.stream.size() > 0)
359+
file.write((char *)&*encoder.stream.data(), encoder.stream.size());
354360
quint64 size = pad(file.pos()) - file.pos();
355361
char tmp[NEXUS_PADDING];
356362
file.write(tmp, size);

0 commit comments

Comments
 (0)