Fixed AppendVPrintf() handling for large strings.
This caused a failure in server favicons.
This commit is contained in:
parent
b952ea11c7
commit
38d0bdf00a
@ -47,15 +47,13 @@ AString & AppendVPrintf(AString & str, const char *format, va_list args)
|
|||||||
#endif // _MSC_VER
|
#endif // _MSC_VER
|
||||||
|
|
||||||
// Allocate a buffer and printf into it:
|
// Allocate a buffer and printf into it:
|
||||||
str.resize(len + 1);
|
std::vector<char> Buffer(len + 1);
|
||||||
// HACK: we're accessing AString's internal buffer in a way that is NOT guaranteed to always work. But it works on all STL implementations tested.
|
|
||||||
// I can't think of any other way that is safe, doesn't allocate twice as much space as needed and doesn't use C++11 features like the move constructor
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
vsprintf_s((char *)str.data(), len + 1, format, args);
|
vsprintf_s((char *)&(Buffer.front()), Buffer.size(), format, args);
|
||||||
#else // _MSC_VER
|
#else // _MSC_VER
|
||||||
vsnprintf((char *)str.data(), len + 1, format, args);
|
vsnprintf((char *)&(Buffer.front()), Buffer.size(), format, args);
|
||||||
#endif // else _MSC_VER
|
#endif // else _MSC_VER
|
||||||
str.resize(len);
|
str.append(&(Buffer.front()), Buffer.size() - 1);
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user