|
|
@@ -26,6 +26,9 @@ get_string() {
|
|
|
|
|
|
// First, get the length of the string
|
|
|
size_t size = get_uint16();
|
|
|
+ if (size == 0) {
|
|
|
+ return string();
|
|
|
+ }
|
|
|
|
|
|
char *buffer = (char *)alloca(size);
|
|
|
_in->read(buffer, size);
|
|
|
@@ -42,6 +45,9 @@ get_string32() {
|
|
|
|
|
|
// First, get the length of the string
|
|
|
size_t size = get_uint32();
|
|
|
+ if (size == 0) {
|
|
|
+ return string();
|
|
|
+ }
|
|
|
|
|
|
char *buffer = (char *)PANDA_MALLOC_ARRAY(size);
|
|
|
_in->read(buffer, size);
|
|
|
@@ -60,7 +66,7 @@ get_z_string() {
|
|
|
|
|
|
string result;
|
|
|
int ch = _in->get();
|
|
|
- while (!_in->eof() && !_in->fail() && ch != '\0') {
|
|
|
+ while (!_in->fail() && ch != EOF && ch != '\0') {
|
|
|
result += (char)ch;
|
|
|
ch = _in->get();
|
|
|
}
|
|
|
@@ -76,6 +82,10 @@ string StreamReader::
|
|
|
get_fixed_string(size_t size) {
|
|
|
nassertr(!_in->eof() && !_in->fail(), string());
|
|
|
|
|
|
+ if (size == 0) {
|
|
|
+ return string();
|
|
|
+ }
|
|
|
+
|
|
|
char *buffer = (char *)alloca(size);
|
|
|
_in->read(buffer, size);
|
|
|
size_t read_bytes = _in->gcount();
|
|
|
@@ -90,8 +100,9 @@ get_fixed_string(size_t size) {
|
|
|
*/
|
|
|
void StreamReader::
|
|
|
skip_bytes(size_t size) {
|
|
|
- nassertv(!_in->eof() && !_in->fail());
|
|
|
+ nassertv(!_in->fail());
|
|
|
nassertv((int)size >= 0);
|
|
|
+ nassertv(size == 0 || !_in->eof());
|
|
|
|
|
|
while (size > 0) {
|
|
|
_in->get();
|
|
|
@@ -145,9 +156,9 @@ string StreamReader::
|
|
|
readline() {
|
|
|
string line;
|
|
|
int ch = _in->get();
|
|
|
- while (!_in->eof() && !_in->fail()) {
|
|
|
+ while (ch != EOF && !_in->fail()) {
|
|
|
line += (char)ch;
|
|
|
- if (ch == '\n') {
|
|
|
+ if (ch == '\n' || _in->eof()) {
|
|
|
// Here's the newline character.
|
|
|
return line;
|
|
|
}
|