]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Replace sprintf with snprintf
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Thu, 4 Nov 2010 21:33:48 +0000 (14:33 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Thu, 4 Nov 2010 21:33:48 +0000 (14:33 -0700)
Replace sprintf with snprintf. This is especially critical when the
format string includes "%s".

Signed-off-by: Colin McCabe <colinm@hq.newdream.net>
15 files changed:
src/client/SyntheticClient.h
src/client/test_ioctls.c
src/include/types.h
src/mds/mdstypes.h
src/messages/MGenericMessage.h
src/mon/MonitorStore.h
src/mon/PGMap.h
src/os/FakeStoreBDBCollections.h
src/os/FileStore.cc
src/osd/OSD.cc
src/osd/OSD.h
src/osdc/rados_bencher.h
src/radosacl.cc
src/rbd.cc
src/test_trans.cc

index 3a1ef64b965cc3b8bb7371387df8047ce68d409c..b94c3e0f74b09772e2850f43023904afb2007d34 100644 (file)
@@ -155,7 +155,7 @@ class SyntheticClient {
   filepath sub;
   char sub_s[50];
   const char *make_sub(const char *base) {
-    sprintf(sub_s, "%s.%d", base, rand() % 100);
+    snprintf(sub_s, sizeof(sub_s), "%s.%d", base, rand() % 100);
     string f = sub_s;
     sub = cwd;
     sub.push_dentry(f);
index cfce167a08e0828c70dc0726048c3daec25ed064..50709274f8c4c2843484e2a2247a064e5e6cf8db 100644 (file)
@@ -5,6 +5,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <limits.h>
 
 #include <sys/ioctl.h>
 #include <netinet/in.h>
@@ -19,7 +20,7 @@ int main(int argc, char **argv)
        int fd, err;
        struct ceph_ioctl_layout l;
        struct ceph_ioctl_dataloc dl;
-        char *new_file_name = (char *)malloc(sizeof(char)*4096);
+        char new_file_name[PATH_MAX];
 
        if (argc < 3) {
                printf("usage: test_ioctls <filename> <offset>\n");
@@ -102,7 +103,8 @@ int main(int argc, char **argv)
         }
         printf("set layout, creating file\n");
 
-        sprintf(new_file_name, "%s/testfile", argv[3]);
+        snprintf(new_file_name, sizeof(new_file_name),
+                "%s/testfile", argv[3]);
         fd = open(new_file_name, O_CREAT | O_RDWR, 0644);
         if (fd < 0) {
                 perror("couldn't open file");
index cf3c4eef9dbb296b5552e513d97c0863ae1c81c0..4855f645848ad02ff9912a10346b5d6c635330ec 100644 (file)
@@ -423,7 +423,7 @@ inline ostream& operator<<(ostream& out, const SnapContext& snapc) {
 
 inline ostream& operator<<(ostream& out, const ceph_fsid& f) {
   char b[37];
-  sprintf(b, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+  snprintf(b, sizeof(b), "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
          f.fsid[0], f.fsid[1], f.fsid[2], f.fsid[3], f.fsid[4], f.fsid[5], f.fsid[6], f.fsid[7],
          f.fsid[8], f.fsid[9], f.fsid[10], f.fsid[11], f.fsid[12], f.fsid[13], f.fsid[14], f.fsid[15]);
   return out << b;
index 42b27189bb882f31b728c266ba479b273bb3f4dd..f3ada3ec4ef9aac3612874b3b9db276d548b2f97 100644 (file)
@@ -3,7 +3,11 @@
 #ifndef CEPH_MDSTYPES_H
 #define CEPH_MDSTYPES_H
 
+#ifndef __STDC_FORMAT_MACROS
+#define __STDC_FORMAT_MACROS
+#endif
 
+#include <inttypes.h>
 #include <math.h>
 #include <ostream>
 #include <set>
@@ -1171,10 +1175,11 @@ struct dentry_key_t {
     __u32 l = strlen(name) + 1;
     char b[20];
     if (snapid != CEPH_NOSNAP) {
-      sprintf(b, "%llx", (long long unsigned)snapid);
+      uint64_t val(snapid);
+      snprintf(b, sizeof(b), "%" PRIx64, val);
       l += strlen(b);
     } else {
-      strcpy(b, "head");
+      snprintf(b, sizeof(b), "%s", "head");
       l += 4;
     }
     ::encode(l, bl);
index 305ea306a95178c7c35b51fd49010311569db583..7b0d32312ba9a10c6262ccc0a63dd23f3e2c371f 100644 (file)
@@ -24,7 +24,7 @@ class MGenericMessage : public Message {
 
  public:
   MGenericMessage(int t) : Message(t) { 
-    sprintf(tname, "generic%d", get_type());
+    snprintf(tname, sizeof(tname), "generic%d", get_type());
   }
 
   //void set_pcid(long pcid) { this->pcid = pcid; }
index dc488c31677dfc675ed9206291c9a74d116a1948..9dc722961572260eaafb265cbcf6013864bf7ec2 100644 (file)
@@ -65,24 +65,24 @@ public:
   }
   bool exists_bl_sn(const char *a, version_t b) {
     char bs[20];
-    sprintf(bs, "%llu", (unsigned long long)b);
+    snprintf(bs, sizeof(bs), "%llu", (unsigned long long)b);
     return exists_bl_ss(a, bs);
   }
   int get_bl_sn(bufferlist& bl, const char *a, version_t b) {
     char bs[20];
-    sprintf(bs, "%llu", (unsigned long long)b);
+    snprintf(bs, sizeof(bs), "%llu", (unsigned long long)b);
     return get_bl_ss(bl, a, bs);
   }
   int put_bl_sn(bufferlist& bl, const char *a, version_t b, bool sync=true) {
     char bs[20];
-    sprintf(bs, "%llu", (unsigned long long)b);
+    snprintf(bs, sizeof(bs), "%llu", (unsigned long long)b);
     return put_bl_ss(bl, a, bs, sync);
   }
 
   int erase_ss(const char *a, const char *b);
   int erase_sn(const char *a, version_t b) {
     char bs[20];
-    sprintf(bs, "%llu", (unsigned long long)b);
+    snprintf(bs, sizeof(bs), "%llu", (unsigned long long)b);
     return erase_ss(a, bs);
   }
 
index 7ddb09eba6ae557d68ffadbb6de036204f3eb144..f789bd2dd954f7a05341092ae21ac9af35b53352 100644 (file)
@@ -310,7 +310,7 @@ public:
     if (pg_sum.num_objects_degraded) {
       double pc = (double)pg_sum.num_objects_degraded / (double)pg_sum.num_object_copies * (double)100.0;
       char b[20];
-      sprintf(b, "%.3lf", pc);
+      snprintf(b, sizeof(b), "%.3lf", pc);
       out << "; " //<< pg_sum.num_objects_missing_on_primary << "/"
          << pg_sum.num_objects_degraded 
          << "/" << pg_sum.num_object_copies << " degraded (" << b << "%)";
index 7d04e272d3f6a12bc12e8f4ad7c529e86c0ed776..34b7e43301e3f03c45ecee58309c3a8f50a56800 100644 (file)
@@ -36,13 +36,11 @@ class FakeStoreBDBCollections {
   
   // dirs
   void get_dir(string& dir) {
-    char s[30];
-    sprintf(s, "%d", whoami);
-    dir = basedir + "/" + s;
+    dir = basedir + "/" + string(whoami);
   }
   void get_collfn(coll_t c, string &fn) {
     char s[100];
-    sprintf(s, "%d/%02llx/%016llx.co", whoami, BDBHASH_FUNC(c), c);
+    snprintf(s, sizeof(s), "%d/%02llx/%016llx.co", whoami, BDBHASH_FUNC(c), c);
     fn = basedir + "/" + s;
   }
 
index ce541b1367c69faf4cd52ef2ce034a659a666245..eecbe9509e5052cc6a17e5f98d0480275f82f982 100644 (file)
@@ -25,6 +25,8 @@
 
 #include "common/Timer.h"
 
+#define __STDC_FORMAT_MACROS
+#include <inttypes.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <sys/types.h>
@@ -913,7 +915,7 @@ int FileStore::write_op_seq(int fd, uint64_t seq)
 {
   char s[30];
   int ret;
-  sprintf(s, "%lld\n", (long long unsigned)seq);
+  snprintf(s, sizeof(s), "%" PRId64 "\n", seq);
   ret = ::pwrite(fd, s, strlen(s), 0);
   return ret;
 }
index 7048d0bf4114b29b55100a7887b067c78f59e724..5ce674d7472941e167f82094988242cf7405d797 100644 (file)
@@ -1793,7 +1793,7 @@ void OSD::handle_command(MMonCommand *m)
     utime_t start = g_clock.now();
     for (uint64_t pos = 0; pos < count; pos += bsize) {
       char nm[30];
-      sprintf(nm, "disk_bw_test_%lld", (long long)pos);
+      snprintf(nm, sizeof(nm), "disk_bw_test_%lld", (long long)pos);
       object_t oid(nm);
       sobject_t soid(oid, 0);
       ObjectStore::Transaction *t = new ObjectStore::Transaction;
index 971db37df73149254a8a1af5407ed96056d7cf7d..6cfbaac0288e39508421774e23076b00d2f2a9fb 100644 (file)
@@ -143,12 +143,12 @@ public:
   
   static sobject_t get_osdmap_pobject_name(epoch_t epoch) { 
     char foo[20];
-    sprintf(foo, "osdmap.%d", epoch);
+    snprintf(foo, sizeof(foo), "osdmap.%d", epoch);
     return sobject_t(object_t(foo), 0); 
   }
   static sobject_t get_inc_osdmap_pobject_name(epoch_t epoch) { 
     char foo[20];
-    sprintf(foo, "inc_osdmap.%d", epoch);
+    snprintf(foo, sizeof(foo), "inc_osdmap.%d", epoch);
     return sobject_t(object_t(foo), 0); 
   }
 
index dfd11c64f775acc250affe93c3c65d6083b7dbdd..5f1e261658a8909a3ee6672a33f16597b162b69a 100644 (file)
@@ -52,7 +52,7 @@ void generate_object_name(char *s, int objnum)
   char hostname[30];
   gethostname(hostname, sizeof(hostname)-1);
   hostname[sizeof(hostname)-1] = 0;
-  sprintf(s, "%s_%d_object%d", hostname, getpid(), objnum);
+  snprintf(s, sizeof(hostname), "%s_%d_object%d", hostname, getpid(), objnum);
 }
 
 int write_bench(Rados& rados, rados_pool_t pool,
@@ -254,7 +254,7 @@ int write_bench(Rados& rados, rados_pool_t pool,
   bandwidth = ((double)data->finished)*((double)data->object_size)/(double)timePassed;
   bandwidth = bandwidth/(1024*1024); // we want it in MB/sec
   char bw[20];
-  sprintf(bw, "%.3lf \n", bandwidth);
+  snprintf(bw, sizeof(bw), "%.3lf \n", bandwidth);
   
   cout << "Total time run:        " << timePassed << std::endl
        << "Total writes made:     " << data->finished << std::endl
@@ -427,7 +427,7 @@ int seq_read_bench(Rados& rados, rados_pool_t pool, int seconds_to_run,
   bandwidth = ((double)data->finished)*((double)data->object_size)/(double)runtime;
   bandwidth = bandwidth/(1024*1024); // we want it in MB/sec
   char bw[20];
-  sprintf(bw, "%.3lf \n", bandwidth);
+  snprintf(bw, sizeof(bw), "%.3lf \n", bandwidth);
 
   cout << "Total time run:        " << runtime << std::endl
        << "Total reads made:     " << data->finished << std::endl
index 82979ea89ed281c906c5363ee3e446a21e50aeed..126e585cf048ed2b4591ade1f936f0e6a4884d85 100644 (file)
@@ -145,7 +145,7 @@ int main(int argc, const char **argv)
 
   ACLID id;
 
-  sprintf(id.id, "%.16x", 0x1234);
+  snprintf(id.id, ID_SIZE + 1, "%.16x", 0x1234);
   cout << "id=" << id.id << std::endl;
 
   r = rados.exec(pool, oid, "acl", "get", bl, bl2);
index 07849edc58898efd8248539d4eab7d0afbfb5643..32b93a3420d7107990d59802201fcf4842ad2865 100644 (file)
@@ -12,6 +12,7 @@
  * 
  */
 
+#define __STDC_FORMAT_MACROS
 #include "config.h"
 
 #include "common/common_init.h"
@@ -20,12 +21,12 @@ using namespace librados;
 #include "include/byteorder.h"
 
 
+#include <errno.h>
+#include <inttypes.h>
 #include <iostream>
-
 #include <stdlib.h>
-#include <time.h>
 #include <sys/types.h>
-#include <errno.h>
+#include <time.h>
 
 #include "include/rbd_types.h"
 
@@ -121,7 +122,8 @@ static void print_header(const char *imgname, rbd_obj_header_ondisk *header)
 static string get_block_oid(rbd_obj_header_ondisk *header, uint64_t num)
 {
   char o[RBD_MAX_SEG_NAME_SIZE];
-  sprintf(o, "%s.%012llx", header->block_name, (unsigned long long)num);
+  snprintf(o, RBD_MAX_SEG_NAME_SIZE,
+          "%s.%012" PRIx64, header->block_name, num);
   return o;
 }
 
index b2a43f869941abc2a1a136eeb62e4354b864865b..076321622dda2888494a1548adbb4b2c0fd26d0b 100644 (file)
@@ -60,7 +60,7 @@ int main(int argc, const char **argv)
 
   for (int i=0; i<mb; i++) {
     char f[30];
-    sprintf(f, "foo%d\n", i);
+    snprintf(f, sizeof(f), "foo%d\n", i);
     sobject_t soid(f, CEPH_NOSNAP);
     t.write(coll_t(), soid, 0, bl.length(), bl);
   }