Merge pull request #767 from dhylands/fix-short-read
Deal with reading a buffer less than what was allocated.
This commit is contained in:
commit
3e0bce3587
10
py/stream.c
10
py/stream.c
|
@ -97,7 +97,7 @@ STATIC mp_obj_t stream_read(uint n_args, const mp_obj_t *args) {
|
||||||
}
|
}
|
||||||
int error;
|
int error;
|
||||||
mp_int_t out_sz = o->type->stream_p->read(o, p, more_bytes, &error);
|
mp_int_t out_sz = o->type->stream_p->read(o, p, more_bytes, &error);
|
||||||
if (out_sz == -1) {
|
if (out_sz < 0) {
|
||||||
vstr_cut_tail_bytes(&vstr, more_bytes);
|
vstr_cut_tail_bytes(&vstr, more_bytes);
|
||||||
if (is_nonblocking_error(error)) {
|
if (is_nonblocking_error(error)) {
|
||||||
// With non-blocking streams, we read as much as we can.
|
// With non-blocking streams, we read as much as we can.
|
||||||
|
@ -113,11 +113,13 @@ STATIC mp_obj_t stream_read(uint n_args, const mp_obj_t *args) {
|
||||||
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError, "[Errno %d]", error));
|
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError, "[Errno %d]", error));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (out_sz == 0) {
|
if (out_sz < more_bytes) {
|
||||||
// Finish reading.
|
// Finish reading.
|
||||||
// TODO what if we have read only half a non-ASCII char?
|
// TODO what if we have read only half a non-ASCII char?
|
||||||
vstr_cut_tail_bytes(&vstr, more_bytes);
|
vstr_cut_tail_bytes(&vstr, more_bytes - out_sz);
|
||||||
break;
|
if (out_sz == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// count chars from bytes just read
|
// count chars from bytes just read
|
||||||
|
|
Loading…
Reference in New Issue