Also check EOF in getBuffer()
This commit is contained in:
16
data.cpp
16
data.cpp
@@ -60,9 +60,12 @@ int PycFile::getByte()
|
|||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
int PycFile::getBuffer(int bytes, void* buffer)
|
void PycFile::getBuffer(int bytes, void* buffer)
|
||||||
{
|
{
|
||||||
return (int)fread(buffer, 1, bytes, m_stream);
|
if (fread(buffer, 1, bytes, m_stream) != (size_t)bytes) {
|
||||||
|
fputs("PycFile::getBuffer(): Unexpected end of stream\n", stderr);
|
||||||
|
std::exit(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -78,14 +81,15 @@ int PycBuffer::getByte()
|
|||||||
return ch & 0xFF; // Make sure it's just a byte!
|
return ch & 0xFF; // Make sure it's just a byte!
|
||||||
}
|
}
|
||||||
|
|
||||||
int PycBuffer::getBuffer(int bytes, void* buffer)
|
void PycBuffer::getBuffer(int bytes, void* buffer)
|
||||||
{
|
{
|
||||||
if (m_pos + bytes > m_size)
|
if (m_pos + bytes > m_size) {
|
||||||
bytes = m_size - m_pos;
|
fputs("PycBuffer::getBuffer(): Unexpected end of stream\n", stderr);
|
||||||
|
std::exit(1);
|
||||||
|
}
|
||||||
if (bytes != 0)
|
if (bytes != 0)
|
||||||
memcpy(buffer, (m_buffer + m_pos), bytes);
|
memcpy(buffer, (m_buffer + m_pos), bytes);
|
||||||
m_pos += bytes;
|
m_pos += bytes;
|
||||||
return bytes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int formatted_print(std::ostream& stream, const char* format, ...)
|
int formatted_print(std::ostream& stream, const char* format, ...)
|
||||||
|
6
data.h
6
data.h
@@ -19,7 +19,7 @@ public:
|
|||||||
virtual bool atEof() const = 0;
|
virtual bool atEof() const = 0;
|
||||||
|
|
||||||
virtual int getByte() = 0;
|
virtual int getByte() = 0;
|
||||||
virtual int getBuffer(int bytes, void* buffer) = 0;
|
virtual void getBuffer(int bytes, void* buffer) = 0;
|
||||||
int get16();
|
int get16();
|
||||||
int get32();
|
int get32();
|
||||||
Pyc_INT64 get64();
|
Pyc_INT64 get64();
|
||||||
@@ -34,7 +34,7 @@ public:
|
|||||||
bool atEof() const override;
|
bool atEof() const override;
|
||||||
|
|
||||||
int getByte() override;
|
int getByte() override;
|
||||||
int getBuffer(int bytes, void* buffer) override;
|
void getBuffer(int bytes, void* buffer) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FILE* m_stream;
|
FILE* m_stream;
|
||||||
@@ -50,7 +50,7 @@ public:
|
|||||||
bool atEof() const override { return (m_pos == m_size); }
|
bool atEof() const override { return (m_pos == m_size); }
|
||||||
|
|
||||||
int getByte() override;
|
int getByte() override;
|
||||||
int getBuffer(int bytes, void* buffer) override;
|
void getBuffer(int bytes, void* buffer) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const unsigned char* m_buffer;
|
const unsigned char* m_buffer;
|
||||||
|
Reference in New Issue
Block a user