diff --git a/src/encode.c b/src/encode.c
index 2f458a5ba2cd24106b6d1b6cd67357f341e0c3a8..ddcb86aae917259cfb1d6a88b0fdabb46db8dff0 100644
--- a/src/encode.c
+++ b/src/encode.c
@@ -4393,7 +4393,7 @@ static void decode_value2(struct decode_data *data)
 		/* Expected identifier reference number */
 		decode_number(no, data);
 
-		if (no > p->num_identifier_references) {
+		if (no < 0 || no > p->num_identifier_references) {
 		  EDB (3, dump_program_tables (p, data->depth));
 		  ref_push_program (p);
 		  decode_error(data, Pike_sp - 1,