Skip to content

Commit 0f6b94e

Browse files
committed
Fix some failing VCs reported by gnatprove
1 parent 3b1e482 commit 0f6b94e

4 files changed

Lines changed: 39 additions & 31 deletions

File tree

client/src/coap_client.adb

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ procedure CoAP_Client is
7171
Global =>
7272
(Input => CoAP_SPARK.Log.Active_Level,
7373
In_Out => (Ada.Text_IO.File_System, CoAP_SPARK.Random.Generator))
74-
7574
is
75+
7676
URI : constant CoAP_SPARK.URI.URI :=
7777
CoAP_SPARK.URI.Create (URI_String);
7878
Ctx : FSM.Context;
@@ -81,6 +81,18 @@ procedure CoAP_Client is
8181
(Is_Secure =>
8282
CoAP_SPARK.URI.Scheme (URI) = CoAP_SPARK.Secure_Scheme);
8383
Valid_URI : Boolean := True;
84+
85+
procedure Finalize is
86+
begin
87+
RFLX.RFLX_Types.Free (Payload);
88+
if FSM.Initialized (Ctx) then
89+
FSM.Finalize (Ctx);
90+
end if;
91+
pragma Assert (FSM.Uninitialized (Ctx));
92+
Session_Environment.Finalize (Ctx.E);
93+
pragma Assert (Session_Environment.Is_Finalized (Ctx.E));
94+
end Finalize;
95+
8496
begin
8597

8698
if URI_String = "" or else URI_String (URI_String'First) = '-' then
@@ -114,14 +126,6 @@ procedure CoAP_Client is
114126
CoAP_SPARK.Log.Put ("Query: ");
115127
CoAP_SPARK.Log.Put_Line (CoAP_SPARK.URI.Query (URI));
116128

117-
CoAP_Secure.Initialize (Socket => Skt);
118-
if not CoAP_SPARK.Channel.Is_Valid (Skt) then
119-
CoAP_SPARK.Log.Put_Line
120-
("Communication problems.", CoAP_SPARK.Log.Error);
121-
RFLX.RFLX_Types.Free (Payload);
122-
return;
123-
end if;
124-
125129
Session_Environment.Initialize
126130
(Method => Method,
127131
Server => CoAP_SPARK.URI.Host (URI),
@@ -134,27 +138,30 @@ procedure CoAP_Client is
134138
if Ctx.E.Current_Status /= CoAP_SPARK.OK then
135139
CoAP_SPARK.Log.Put_Line
136140
(Ctx.E.Current_Status'Image, CoAP_SPARK.Log.Error);
137-
RFLX.RFLX_Types.Free (Payload);
138-
Session_Environment.Finalize (Ctx.E);
139-
pragma Assert (Session_Environment.Is_Finalized (Ctx.E));
141+
Finalize;
140142
return;
141143
end if;
142144
pragma Assert (FSM.Uninitialized (Ctx));
143145

144146
FSM.Initialize (Ctx);
147+
148+
CoAP_Secure.Initialize (Socket => Skt);
149+
if not CoAP_SPARK.Channel.Is_Ready (Skt) then
150+
CoAP_SPARK.Log.Put_Line
151+
("Could not initialize socket.", CoAP_SPARK.Log.Error);
152+
Finalize;
153+
return;
154+
end if;
155+
145156
Channel.Connect
146157
(Socket => Skt,
147158
Server => CoAP_SPARK.URI.Host (URI),
148159
Port => CoAP_SPARK.Channel.Port_Type (CoAP_SPARK.URI.Port (URI)));
149160

150-
if not CoAP_SPARK.Channel.Is_Valid (Skt) then
161+
if not CoAP_SPARK.Channel.Is_Ready (Skt) then
151162
CoAP_SPARK.Log.Put_Line
152163
("Connection problems.", CoAP_SPARK.Log.Error);
153-
RFLX.RFLX_Types.Free (Payload);
154-
FSM.Finalize (Ctx);
155-
pragma Assert (FSM.Uninitialized (Ctx));
156-
Session_Environment.Finalize (Ctx.E);
157-
pragma Assert (Session_Environment.Is_Finalized (Ctx.E));
164+
Finalize;
158165
return;
159166
end if;
160167

@@ -208,11 +215,7 @@ procedure CoAP_Client is
208215
SPARK_Terminal.Set_Exit_Status (SPARK_Terminal.Exit_Status_Failure);
209216
end if;
210217

211-
FSM.Finalize (Ctx);
212-
pragma Assert (FSM.Uninitialized (Ctx));
213-
214-
Session_Environment.Finalize (Ctx.E);
215-
pragma Assert (Session_Environment.Is_Finalized (Ctx.E));
218+
Finalize;
216219
end Run_Session;
217220

218221
Method : RFLX.CoAP.Method_Code := RFLX.CoAP.Get;

src/coap_spark-channel.adb

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -354,27 +354,27 @@ is
354354
end Receive_Socket;
355355

356356
procedure Receive_Socket
357-
(Socket : Socket_Type;
357+
(Socket : SPARK_Sockets.Optional_Socket;
358358
Item : out Ada.Streams.Stream_Element_Array;
359359
Last : out Ada.Streams.Stream_Element_Offset;
360360
From : out Address_Type)
361361
with
362362
Relaxed_Initialization => Item,
363-
Pre => Is_Valid (Socket),
363+
Pre => Socket.Exists,
364364
Post =>
365365
Last in Item'First - 1 .. Item'Last
366366
and then Item (Item'First .. Last)'Initialized;
367367

368368
procedure Receive_Socket
369-
(Socket : Socket_Type;
369+
(Socket : SPARK_Sockets.Optional_Socket;
370370
Item : out Ada.Streams.Stream_Element_Array;
371371
Last : out Ada.Streams.Stream_Element_Offset;
372372
From : out Address_Type)
373373
with SPARK_Mode => Off
374374
is
375375
begin
376376
GNAT.Sockets.Receive_Socket
377-
(Socket => Socket.Attached_Socket.Socket,
377+
(Socket => Socket.Socket,
378378
Item => Item,
379379
Last => Last,
380380
From => GNAT.Sockets.Sock_Addr_Type (From.Sock_Addr));
@@ -412,7 +412,7 @@ is
412412

413413
if Socket.Is_Server then
414414
Receive_Socket
415-
(Socket => Socket,
415+
(Socket => Socket.Attached_Socket,
416416
Item => Data,
417417
Last => Last,
418418
From => Socket.Client_Address);
@@ -445,6 +445,11 @@ is
445445
Socket =>
446446
SPARK_Sockets.To_C (Socket.Attached_Socket.Socket));
447447

448+
if Socket.Result /= SPARK_Sockets.Success then
449+
Finalize (Socket);
450+
return;
451+
end if;
452+
448453
Socket.Result := WolfSSL.Accept_Connection (Socket.Ssl);
449454
if Socket.Result /= WolfSSL.Success then
450455
declare

src/coap_spark-client_session.adb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ is
1717
Pre =>
1818
FSM.Initialized (Ctx)
1919
and then FSM.Has_Data (Ctx, FSM.C_Transport)
20-
and then CoAP_SPARK.Channel.Is_Valid (Skt),
20+
and then CoAP_SPARK.Channel.Is_Ready (Skt),
2121
Post =>
2222
FSM.Initialized (Ctx)
2323
is
@@ -49,7 +49,7 @@ is
4949
Pre =>
5050
FSM.Initialized (Ctx)
5151
and then FSM.Needs_Data (Ctx, FSM.C_Transport)
52-
and then CoAP_SPARK.Channel.Is_Valid (Skt),
52+
and then CoAP_SPARK.Channel.Is_Ready (Skt),
5353
Post =>
5454
FSM.Initialized (Ctx)
5555
is

src/coap_spark-client_session.ads

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ is
1313
with
1414
Pre =>
1515
FSM.Initialized (Ctx)
16-
and then CoAP_SPARK.Channel.Is_Valid (Skt),
16+
and then CoAP_SPARK.Channel.Is_Ready (Skt),
1717
Post => FSM.Initialized (Ctx);
1818

1919
end CoAP_SPARK.Client_Session;

0 commit comments

Comments
 (0)