@@ -63,6 +63,7 @@ int pipe(int fildes[2])
63
63
}
64
64
65
65
__CPROVER_atomic_begin ();
66
+ __CPROVER_assume (__CPROVER_pipe_offset >= 0 );
66
67
__CPROVER_assume (__CPROVER_pipe_offset %2 == 0 );
67
68
__CPROVER_assume (__CPROVER_pipe_offset <=(int )(__CPROVER_pipe_offset + __CPROVER_pipe_count ));
68
69
fildes [0 ]= __CPROVER_pipe_offset + __CPROVER_pipe_count ;
@@ -106,6 +107,8 @@ int close(int fildes)
106
107
if ((fildes >=0 && fildes <=2 ) || fildes < __CPROVER_pipe_offset )
107
108
return 0 ;
108
109
110
+ __CPROVER_assume (__CPROVER_pipe_offset >= 0 );
111
+
109
112
int retval = -1 ;
110
113
fildes -= __CPROVER_pipe_offset ;
111
114
if (fildes %2 == 1 )
@@ -164,14 +167,18 @@ ret_type write(int fildes, const void *buf, size_type nbyte)
164
167
return retval ;
165
168
}
166
169
170
+ __CPROVER_assume (__CPROVER_pipe_offset >= 0 );
171
+
167
172
int retval = -1 ;
168
173
fildes -= __CPROVER_pipe_offset ;
169
174
if (fildes %2 == 1 )
170
175
-- fildes ;
171
176
__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 )
175
182
{
176
183
for (size_type i = 0 ; i < nbyte ; ++ i )
177
184
__CPROVER_pipes [fildes ].data [i + __CPROVER_pipes [fildes ].next_avail ]=
@@ -262,12 +269,16 @@ ret_type read(int fildes, void *buf, size_type nbyte)
262
269
return error ? -1 : nread ;
263
270
}
264
271
272
+ __CPROVER_assume (__CPROVER_pipe_offset >= 0 );
273
+
265
274
int retval = 0 ;
266
275
fildes -= __CPROVER_pipe_offset ;
267
276
if (fildes %2 == 1 )
268
277
-- fildes ;
269
278
__CPROVER_atomic_begin ();
270
- if (!__CPROVER_pipes [fildes ].widowed )
279
+ if (
280
+ !__CPROVER_pipes [fildes ].widowed &&
281
+ __CPROVER_pipes [fildes ].next_unread >= 0 )
271
282
{
272
283
for (size_type i = 0 ; i < nbyte &&
273
284
__CPROVER_pipes [fildes ].next_unread <
0 commit comments