Skip to content

Commit 2f2660b

Browse files
committed
lib: protect against empty lines in body of a component
1 parent 042ef03 commit 2f2660b

File tree

1 file changed

+42
-39
lines changed

1 file changed

+42
-39
lines changed

kicadsch/src/kicadlib.ml

Lines changed: 42 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -189,46 +189,49 @@ module MakePainter (P: Painter): (CompPainter with type drawContext:=P.t) = stru
189189

190190

191191
let parse_line line =
192+
if (String.length line > 0) then
192193
match (String.get line 0) with
193-
|'A' ->
194-
begin
195-
match parse_arc line with
196-
| Some a -> a
197-
| None -> failwith ("Error parsing arc " ^ line)
198-
end
199-
|'P' ->
200-
begin
201-
match parse_Poly line with
202-
| Some p -> p
203-
| None -> failwith ("Error parsing poly " ^ line)
204-
end
205-
|'S' ->
206-
begin
207-
match parse_rect line with
208-
| Some p -> p
209-
| None -> failwith ("Error parsing rectangle " ^ line)
210-
end
211-
|'C' ->
212-
begin
213-
match parse_circle line with
214-
| Some c -> c
215-
| None -> failwith ("Error parsing circle " ^ line)
216-
end
217-
|'F' -> {parts=(-1); prim=Field}
218-
|'X' ->
219-
begin
220-
match parse_pin line with
221-
|Some p -> p
222-
|None -> failwith ("Error parsing pin :" ^ line)
223-
end
224-
|'T' ->
225-
begin
226-
match parse_text line with
227-
|Some t -> t
228-
|None -> failwith ("Error parsing pin :" ^ line)
229-
end
230-
| ' ' | '$' -> {parts=(-1); prim=Field}
231-
| _ -> Printf.printf "throwing away line '%s'\n" line; {parts=(-1); prim=Field}
194+
|'A' ->
195+
begin
196+
match parse_arc line with
197+
| Some a -> a
198+
| None -> failwith ("Error parsing arc " ^ line)
199+
end
200+
|'P' ->
201+
begin
202+
match parse_Poly line with
203+
| Some p -> p
204+
| None -> failwith ("Error parsing poly " ^ line)
205+
end
206+
|'S' ->
207+
begin
208+
match parse_rect line with
209+
| Some p -> p
210+
| None -> failwith ("Error parsing rectangle " ^ line)
211+
end
212+
|'C' ->
213+
begin
214+
match parse_circle line with
215+
| Some c -> c
216+
| None -> failwith ("Error parsing circle " ^ line)
217+
end
218+
|'F' -> {parts=(-1); prim=Field}
219+
|'X' ->
220+
begin
221+
match parse_pin line with
222+
|Some p -> p
223+
|None -> failwith ("Error parsing pin :" ^ line)
224+
end
225+
|'T' ->
226+
begin
227+
match parse_text line with
228+
|Some t -> t
229+
|None -> failwith ("Error parsing pin :" ^ line)
230+
end
231+
| ' ' | '$' -> {parts=(-1); prim=Field}
232+
| _ -> Printf.printf "throwing away line '%s'\n" line; {parts=(-1); prim=Field}
233+
else
234+
{parts=(-1); prim=Field}
232235

233236
let fix_illegal_chars name =
234237
String.map (function | '/' | ':' -> '_' | c -> c) name

0 commit comments

Comments
 (0)