mirror of
https://github.com/qpdf/qpdf.git
synced 2025-01-02 22:50:20 +00:00
Remove all calls to sprintf
This commit is contained in:
parent
66c3c8fdf7
commit
a51ae10b8d
@ -1,3 +1,10 @@
|
||||
2013-02-28 Jay Berkenbilt <ejb@ql.org>
|
||||
|
||||
* Remove all calls to sprintf
|
||||
|
||||
* New method QUtil::int_to_string_base to convert to octal or
|
||||
hexademical (or decimal) strings without using sprintf
|
||||
|
||||
2013-02-26 Jay Berkenbilt <ejb@ql.org>
|
||||
|
||||
* Rewrite QUtil::int_to_string and QUtil::double_to_string to
|
||||
|
@ -22,6 +22,8 @@ namespace QUtil
|
||||
QPDF_DLL
|
||||
std::string int_to_string(long long, int length = 0);
|
||||
QPDF_DLL
|
||||
std::string int_to_string_base(long long, int base, int length = 0);
|
||||
QPDF_DLL
|
||||
std::string double_to_string(double, int decimal_places = 0);
|
||||
|
||||
QPDF_DLL
|
||||
|
@ -95,7 +95,6 @@ QPDF_String::unparse(bool force_binary)
|
||||
else
|
||||
{
|
||||
result += "(";
|
||||
char num[5];
|
||||
for (unsigned int i = 0; i < this->val.length(); ++i)
|
||||
{
|
||||
char ch = this->val[i];
|
||||
@ -140,8 +139,9 @@ QPDF_String::unparse(bool force_binary)
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(num, "\\%03o", static_cast<unsigned char>(ch)); // XXXX
|
||||
result += num;
|
||||
result += "\\" + QUtil::int_to_string_base(
|
||||
static_cast<int>(static_cast<unsigned char>(ch)),
|
||||
8, 3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -24,11 +24,23 @@
|
||||
std::string
|
||||
QUtil::int_to_string(long long num, int length)
|
||||
{
|
||||
// Backward compatibility -- this function used to use sprintf
|
||||
// with %0*d, so we interpret length such that a negative value
|
||||
// appends spaces and a positive value prepends zeroes.
|
||||
return int_to_string_base(num, 10, length);
|
||||
}
|
||||
|
||||
std::string
|
||||
QUtil::int_to_string_base(long long num, int base, int length)
|
||||
{
|
||||
// Backward compatibility -- int_to_string, which calls this
|
||||
// function, used to use sprintf with %0*d, so we interpret length
|
||||
// such that a negative value appends spaces and a positive value
|
||||
// prepends zeroes.
|
||||
if (! ((base == 8) || (base == 10) || (base == 16)))
|
||||
{
|
||||
throw std::logic_error(
|
||||
"int_to_string_base called with unsupported base");
|
||||
}
|
||||
std::ostringstream buf;
|
||||
buf << num;
|
||||
buf << std::setbase(base) << std::nouppercase << num;
|
||||
std::string result;
|
||||
if ((length > 0) &&
|
||||
(buf.str().length() < static_cast<size_t>(length)))
|
||||
@ -152,16 +164,13 @@ QUtil::copy_string(std::string const& str)
|
||||
std::string
|
||||
QUtil::hex_encode(std::string const& input)
|
||||
{
|
||||
size_t input_size = input.length();
|
||||
size_t hex_size = 1 + (2 * input_size);
|
||||
PointerHolder<char> bufp(true, new char[hex_size]);
|
||||
char* buf = bufp.getPointer();
|
||||
buf[hex_size - 1] = '\0';
|
||||
for (unsigned int i = 0; i < input_size; ++i)
|
||||
std::string result;
|
||||
for (unsigned int i = 0; i < input.length(); ++i)
|
||||
{
|
||||
sprintf(buf + i * 2, "%02x", static_cast<unsigned char>(input[i])); // XXXX
|
||||
result += QUtil::int_to_string_base(
|
||||
static_cast<int>(static_cast<unsigned char>(input[i])), 16, 2);
|
||||
}
|
||||
return buf;
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -8,6 +8,9 @@
|
||||
0.00012
|
||||
0.12346
|
||||
0.00012
|
||||
16059
|
||||
37273
|
||||
3ebb
|
||||
one
|
||||
7
|
||||
compare okay
|
||||
|
@ -23,7 +23,10 @@ void string_conversion_test()
|
||||
<< QUtil::double_to_string(.1234, 5) << std::endl
|
||||
<< QUtil::double_to_string(.0001234, 5) << std::endl
|
||||
<< QUtil::double_to_string(.123456, 5) << std::endl
|
||||
<< QUtil::double_to_string(.000123456, 5) << std::endl;
|
||||
<< QUtil::double_to_string(.000123456, 5) << std::endl
|
||||
<< QUtil::int_to_string_base(16059, 10) << std::endl
|
||||
<< QUtil::int_to_string_base(16059, 8) << std::endl
|
||||
<< QUtil::int_to_string_base(16059, 16) << std::endl;
|
||||
|
||||
std::string embedded_null = "one";
|
||||
embedded_null += '\0';
|
||||
@ -86,10 +89,8 @@ void getenv_test()
|
||||
|
||||
static void print_utf8(unsigned long val)
|
||||
{
|
||||
char t[20];
|
||||
sprintf(t, "%lx", val); // XXXX
|
||||
std::string result = QUtil::toUTF8(val);
|
||||
std::cout << "0x" << t << " ->";
|
||||
std::cout << "0x" << QUtil::int_to_string_base(val, 16) << " ->";
|
||||
if (val < 0xfffe)
|
||||
{
|
||||
std::cout << " " << result;
|
||||
@ -102,9 +103,8 @@ static void print_utf8(unsigned long val)
|
||||
for (std::string::iterator iter = result.begin();
|
||||
iter != result.end(); ++iter)
|
||||
{
|
||||
char t[3];
|
||||
sprintf(t, "%02x", static_cast<unsigned char>(*iter)); // XXXX
|
||||
std::cout << " " << t;
|
||||
std::cout << " " << QUtil::int_to_string_base(
|
||||
static_cast<int>(static_cast<unsigned char>(*iter)), 16, 2);
|
||||
}
|
||||
}
|
||||
std::cout << std::endl;
|
||||
|
Loading…
Reference in New Issue
Block a user