mirror of
https://gitlab.com/etherlab.org/ethercat.git
synced 2026-09-25 19:43:49 +08:00
Merge branch 'fix-formatted-read-into-char-buf' into 'stable-1.7'
Fix deprecated formatted read into char* from istream See merge request etherlab.org/ethercat!197
This commit is contained in:
@@ -176,8 +176,8 @@ void CommandDownload::execute(const StringVector &args)
|
||||
data.data = new uint8_t[data.data_size + 1];
|
||||
|
||||
try {
|
||||
data.data_size = interpretAsType(
|
||||
dataType, contents, data.data, data.data_size);
|
||||
data.data_size = interpretAsType(dataType, contents, data.data,
|
||||
data.data_size + 1);
|
||||
} catch (SizeException &e) {
|
||||
delete [] data.data;
|
||||
throwCommandException(e.what());
|
||||
@@ -197,8 +197,8 @@ void CommandDownload::execute(const StringVector &args)
|
||||
data.data = new uint8_t[data.data_size + 1];
|
||||
|
||||
try {
|
||||
data.data_size = interpretAsType(
|
||||
dataType, args[valueIndex], data.data, data.data_size);
|
||||
data.data_size = interpretAsType(dataType, args[valueIndex],
|
||||
data.data, data.data_size + 1);
|
||||
} catch (SizeException &e) {
|
||||
delete [] data.data;
|
||||
throwCommandException(e.what());
|
||||
|
||||
@@ -131,11 +131,11 @@ void CommandRegWrite::execute(const StringVector &args)
|
||||
io.size = 1024; // FIXME
|
||||
}
|
||||
|
||||
io.data = new uint8_t[io.size];
|
||||
io.data = new uint8_t[io.size + 1];
|
||||
|
||||
try {
|
||||
io.size = interpretAsType(
|
||||
dataType, args[1], io.data, io.size);
|
||||
dataType, args[1], io.data, io.size + 1);
|
||||
} catch (SizeException &e) {
|
||||
delete [] io.data;
|
||||
throwCommandException(e.what());
|
||||
|
||||
@@ -149,18 +149,18 @@ void CommandSoeWrite::execute(const StringVector &args)
|
||||
memSize = dataType->byteSize;
|
||||
} else {
|
||||
// guess string type size
|
||||
memSize = args[valueArgIndex].size() + 1;
|
||||
memSize = args[valueArgIndex].size();
|
||||
if (!memSize) {
|
||||
err << "Empty argument not allowed.";
|
||||
throwInvalidUsageException(err);
|
||||
}
|
||||
}
|
||||
|
||||
ioctl.data = new uint8_t[memSize];
|
||||
ioctl.data = new uint8_t[memSize + 1];
|
||||
|
||||
try {
|
||||
ioctl.data_size = interpretAsType(
|
||||
dataType, args[valueArgIndex], ioctl.data, memSize);
|
||||
dataType, args[valueArgIndex], ioctl.data, memSize + 1);
|
||||
} catch (SizeException &e) {
|
||||
delete [] ioctl.data;
|
||||
throwCommandException(e.what());
|
||||
|
||||
@@ -191,14 +191,14 @@ size_t DataTypeHandler::interpretAsType(
|
||||
case 0x000a: // octet_string
|
||||
case 0x000b: // unicode_string
|
||||
dataSize = str.str().size();
|
||||
if (dataSize > targetSize) {
|
||||
if (dataSize + 1 > targetSize) { // leave room for terminating \0
|
||||
stringstream err;
|
||||
err << "String too large ("
|
||||
<< dataSize << " > " << targetSize << ")";
|
||||
<< dataSize << " > " << targetSize - 1 << ")";
|
||||
throw SizeException(err.str());
|
||||
}
|
||||
//str >> (char *) target;
|
||||
str.read((char *) target, dataSize + 1); // including \0 FIXME
|
||||
str.read((char *) target, dataSize);
|
||||
((char *) target)[dataSize] = 0; // terminating \0
|
||||
break;
|
||||
case 0x0011: // double
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user