ref: 1d9cf25f27125da2aedbcbd2fc3519e3a4b8cce5
parent: 3618f6a07f71336ad5741836afb6aeb6cae3ff99
author: Simon Tatham <anakin@pobox.com>
date: Thu Jun 21 15:02:21 EDT 2018
Fix return value from newgame_undo_deserialise_read. The read function used by midend_deserialise and friends is expected never to perform a partial read (the main deserialisation code always knows how many bytes it can expect to see), so it's specified to return simply TRUE or FALSE for success/failure, rather than the number of bytes read. This probably wasn't breaking anything, since in the case of deserialising from an internal memory buffer a short read could only arise due to an outright bug constructing the buffer. But now I've spotted it, I should fix it.
--- a/midend.c
+++ b/midend.c
@@ -564,10 +564,12 @@
{
struct newgame_undo_deserialise_read_ctx *const rctx = ctx;
- int use = min(len, rctx->len - rctx->pos);
- memcpy(buf, rctx->ser->buf + rctx->pos, use);
- rctx->pos += use;
- return use;
+ if (len > rctx->len - rctx->pos)
+ return FALSE;
+
+ memcpy(buf, rctx->ser->buf + rctx->pos, len);
+ rctx->pos += len;
+ return TRUE;
}
struct newgame_undo_deserialise_check_ctx {