libaacs | branch: master | npzacs <npz...@gmail.com> | Wed May  6 11:01:49 2015 
+0300| [f0f4940cbd7f762a49fb0beb0e7a17423cafbbb9] | committer: npzacs

Check str_printf() failures

> http://git.videolan.org/gitweb.cgi/libaacs.git/?a=commit;h=f0f4940cbd7f762a49fb0beb0e7a17423cafbbb9
---

 src/file/keydbcfg.c  |   14 ++++++++++++--
 src/libaacs/aacs.c   |    3 +++
 src/libaacs/crypto.c |    6 ++++++
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/file/keydbcfg.c b/src/file/keydbcfg.c
index ecf260d..1665ad5 100644
--- a/src/file/keydbcfg.c
+++ b/src/file/keydbcfg.c
@@ -54,9 +54,13 @@ static int _mkpath(const char *path)
 {
     struct stat s;
     int result = 1;
-    char *dir = str_printf("%s", path);
+    char *dir = str_dup(path);
     char *end = dir;
 
+    if (!dir) {
+        return -1;
+    }
+
 #ifdef _WIN32
     end += 2; /* skip drive */
 #endif
@@ -161,6 +165,9 @@ static FILE *_open_cfg_file_system(const char *file_name, 
char **path)
     while (NULL != (dir = file_get_config_system(dir))) {
 
         char *cfg_file = str_printf("%s"DIR_SEP"%s"DIR_SEP"%s", dir, CFG_DIR, 
file_name);
+        if (!cfg_file) {
+            continue;
+        }
 
         FILE *fp = fopen(cfg_file, "r");
         if (fp) {
@@ -416,7 +423,7 @@ int keycache_find(const char *type, const uint8_t *disc_id, 
uint8_t *key, unsign
               BD_DEBUG(DBG_FILE, "Error reading from %s\n", file);
             }
 
-            free(key_str);
+            X_FREE(key_str);
 
             fclose(fp);
 
@@ -516,6 +523,9 @@ int cache_get(const char *name, uint32_t *version, uint32_t 
*len, void *buf)
 int cache_remove(const char *name)
 {
     char *file = _cache_file(name);
+    if (!file) {
+        return 0;
+    }
     int result = !remove(file);
     if (!result) {
         BD_DEBUG(DBG_FILE, "Error removing %s\n", file);
diff --git a/src/libaacs/aacs.c b/src/libaacs/aacs.c
index 4d02d04..7865c4c 100644
--- a/src/libaacs/aacs.c
+++ b/src/libaacs/aacs.c
@@ -391,6 +391,9 @@ static AACS_FILE_H *_file_open(AACS *aacs, const char *file)
     }
 
     f_name = str_printf("%s" DIR_SEP "%s", aacs->path, file);
+    if (!f_name) {
+        return NULL;
+    }
     fp = file_open(f_name, "rb");
     X_FREE(f_name);
 
diff --git a/src/libaacs/crypto.c b/src/libaacs/crypto.c
index 64a403e..4db7641 100644
--- a/src/libaacs/crypto.c
+++ b/src/libaacs/crypto.c
@@ -323,6 +323,12 @@ static gcry_error_t _aacs_sexp_key(gcry_sexp_t *p_sexp_key,
       mpi_d ? "(d %m)" : ""
       );
 
+    if (!strfmt) {
+        BD_DEBUG(DBG_AACS | DBG_CRIT, "out of memory\n");
+        err = GPG_ERR_ENOMEM;
+        goto error;
+    }
+
     /* Now build the S-expression */
     GCRY_VERIFY("gcry_sexp_build",
                 gcry_sexp_build(p_sexp_key, NULL, strfmt, mpi_d));

_______________________________________________
libaacs-devel mailing list
libaacs-devel@videolan.org
https://mailman.videolan.org/listinfo/libaacs-devel

Reply via email to