forked from soutade/libgourou
Check for potential write error (or not buffer fully consumed)
This commit is contained in:
parent
e4bd73c03d
commit
c41dd46ca7
|
@ -931,14 +931,19 @@ namespace gourou
|
||||||
void DRMProcessor::exportPrivateLicenseKey(std::string path)
|
void DRMProcessor::exportPrivateLicenseKey(std::string path)
|
||||||
{
|
{
|
||||||
int fd = open(path.c_str(), O_CREAT|O_TRUNC|O_WRONLY, S_IRWXU);
|
int fd = open(path.c_str(), O_CREAT|O_TRUNC|O_WRONLY, S_IRWXU);
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (fd <= 0)
|
if (fd <= 0)
|
||||||
EXCEPTION(GOUROU_FILE_ERROR, "Unable to open " << path);
|
EXCEPTION(GOUROU_FILE_ERROR, "Unable to open " << path);
|
||||||
|
|
||||||
ByteArray privateLicenseKey = ByteArray::fromBase64(user->getPrivateLicenseKey());
|
ByteArray privateLicenseKey = ByteArray::fromBase64(user->getPrivateLicenseKey());
|
||||||
/* In adobekey.py, we get base64 decoded data [26:] */
|
/* In adobekey.py, we get base64 decoded data [26:] */
|
||||||
write(fd, privateLicenseKey.data()+26, privateLicenseKey.length()-26);
|
ret = write(fd, privateLicenseKey.data()+26, privateLicenseKey.length()-26);
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
if (ret != privateLicenseKey.length()-26)
|
||||||
|
{
|
||||||
|
EXCEPTION(gourou::GOUROU_FILE_ERROR, "Error writing " << path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int DRMProcessor::getLogLevel() {return (int)gourou::logLevel;}
|
int DRMProcessor::getLogLevel() {return (int)gourou::logLevel;}
|
||||||
|
|
|
@ -99,7 +99,7 @@ void mkpath(const char *dir)
|
||||||
void fileCopy(const char* in, const char* out)
|
void fileCopy(const char* in, const char* out)
|
||||||
{
|
{
|
||||||
char buffer[4096];
|
char buffer[4096];
|
||||||
int ret, fdIn, fdOut;
|
int ret, ret2, fdIn, fdOut;
|
||||||
|
|
||||||
fdIn = open(in, O_RDONLY);
|
fdIn = open(in, O_RDONLY);
|
||||||
|
|
||||||
|
@ -119,7 +119,19 @@ void fileCopy(const char* in, const char* out)
|
||||||
ret = ::read(fdIn, buffer, sizeof(buffer));
|
ret = ::read(fdIn, buffer, sizeof(buffer));
|
||||||
if (ret <= 0)
|
if (ret <= 0)
|
||||||
break;
|
break;
|
||||||
::write(fdOut, buffer, ret);
|
do
|
||||||
|
{
|
||||||
|
ret2 = ::write(fdOut, buffer, ret);
|
||||||
|
if (ret2 >= 0)
|
||||||
|
{
|
||||||
|
ret -= ret2;
|
||||||
|
buffer += ret2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EXCEPTION(gourou::CLIENT_FILE_ERROR, "Error writing " << out);
|
||||||
|
}
|
||||||
|
} while (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
close (fdIn);
|
close (fdIn);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user