X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=session_file.c;h=aae31a00b361e5173932b37e6d66c19662042db4;hb=87ca93c5043899e3c30edb7e09fadef3ee67d810;hp=33364a29a4540eea957051be8170ab8f341bfe6d;hpb=056be0719f0c1a05cde6fc2483b50e024708fdac;p=libsigrok.git diff --git a/session_file.c b/session_file.c index 33364a29..aae31a00 100644 --- a/session_file.c +++ b/session_file.c @@ -48,9 +48,9 @@ SR_API int sr_session_load(const char *filename) struct zip_stat zs; struct sr_dev_inst *sdi; struct sr_probe *probe; - int ret, probenum, devcnt, i, j; + int ret, probenum, devcnt, version, i, j; uint64_t tmp_u64, total_probes, enabled_probes, p; - char **sections, **keys, *metafile, *val, c; + char **sections, **keys, *metafile, *val, s[11]; char probename[SR_MAX_PROBENAME_LEN + 1]; if (!filename) { @@ -65,16 +65,22 @@ SR_API int sr_session_load(const char *filename) } /* check "version" */ + version = 0; if (!(zf = zip_fopen(archive, "version", 0))) { sr_dbg("session file: Not a sigrok session file."); return SR_ERR; } - ret = zip_fread(zf, &c, 1); - if (ret != 1 || c != '1') { + if ((ret = zip_fread(zf, s, 10)) == -1) { sr_dbg("session file: Not a valid sigrok session file."); return SR_ERR; } zip_fclose(zf); + s[ret] = 0; + version = strtoull(s, NULL, 10); + if (version != 1) { + sr_dbg("session file: Not a valid sigrok session file version."); + return SR_ERR; + } /* read "metadata" */ if (zip_stat(archive, "metadata", 0, &zs) == -1) {