@@ -63,6 +63,7 @@ int pipe(int fildes[2])
6363 }
6464
6565 __CPROVER_atomic_begin ();
66+ __CPROVER_assume (__CPROVER_pipe_offset >= 0 );
6667 __CPROVER_assume (__CPROVER_pipe_offset %2 == 0 );
6768 __CPROVER_assume (__CPROVER_pipe_offset <=(int )(__CPROVER_pipe_offset + __CPROVER_pipe_count ));
6869 fildes [0 ]= __CPROVER_pipe_offset + __CPROVER_pipe_count ;
@@ -106,6 +107,8 @@ int close(int fildes)
106107 if ((fildes >=0 && fildes <=2 ) || fildes < __CPROVER_pipe_offset )
107108 return 0 ;
108109
110+ __CPROVER_assume (__CPROVER_pipe_offset >= 0 );
111+
109112 int retval = -1 ;
110113 fildes -= __CPROVER_pipe_offset ;
111114 if (fildes %2 == 1 )
@@ -164,14 +167,18 @@ ret_type write(int fildes, const void *buf, size_type nbyte)
164167 return retval ;
165168 }
166169
170+ __CPROVER_assume (__CPROVER_pipe_offset >= 0 );
171+
167172 int retval = -1 ;
168173 fildes -= __CPROVER_pipe_offset ;
169174 if (fildes %2 == 1 )
170175 -- fildes ;
171176 __CPROVER_atomic_begin ();
172- if (!__CPROVER_pipes [fildes ].widowed &&
173- sizeof (__CPROVER_pipes [fildes ].data ) >=
174- __CPROVER_pipes [fildes ].next_avail + nbyte )
177+ if (
178+ !__CPROVER_pipes [fildes ].widowed &&
179+ __CPROVER_pipes [fildes ].next_avail >= 0 &&
180+ sizeof (__CPROVER_pipes [fildes ].data ) >=
181+ __CPROVER_pipes [fildes ].next_avail + nbyte )
175182 {
176183 for (size_type i = 0 ; i < nbyte ; ++ i )
177184 __CPROVER_pipes [fildes ].data [i + __CPROVER_pipes [fildes ].next_avail ]=
@@ -262,12 +269,16 @@ ret_type read(int fildes, void *buf, size_type nbyte)
262269 return error ? -1 : nread ;
263270 }
264271
272+ __CPROVER_assume (__CPROVER_pipe_offset >= 0 );
273+
265274 int retval = 0 ;
266275 fildes -= __CPROVER_pipe_offset ;
267276 if (fildes %2 == 1 )
268277 -- fildes ;
269278 __CPROVER_atomic_begin ();
270- if (!__CPROVER_pipes [fildes ].widowed )
279+ if (
280+ !__CPROVER_pipes [fildes ].widowed &&
281+ __CPROVER_pipes [fildes ].next_unread >= 0 )
271282 {
272283 for (size_type i = 0 ; i < nbyte &&
273284 __CPROVER_pipes [fildes ].next_unread <
0 commit comments