Skip to content

Commit

Permalink
Backed out changeset e84a9df80ec5 (bug 1060179)
Browse files Browse the repository at this point in the history
  • Loading branch information
BavarianTomcat committed Oct 9, 2014
1 parent 0037509 commit 9a829fc
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 51 deletions.
42 changes: 1 addition & 41 deletions content/media/VideoUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@
#include "ImageContainer.h"
#include "SharedThreadPool.h"
#include "mozilla/Preferences.h"
#include "mozilla/Base64.h"
#include "nsIRandomGenerator.h"
#include "nsIServiceManager.h"

#include <stdint.h>

namespace mozilla {
Expand Down Expand Up @@ -232,42 +230,4 @@ ExtractH264CodecDetails(const nsAString& aCodec,
return true;
}

nsresult
GenerateRandomPathName(nsCString& aOutSalt, uint32_t aLength)
{
nsresult rv;
nsCOMPtr<nsIRandomGenerator> rg =
do_GetService("@mozilla.org/security/random-generator;1", &rv);
if (NS_FAILED(rv)) return rv;

// For each three bytes of random data we will get four bytes of
// ASCII. Request a bit more to be safe and truncate to the length
// we want at the end.
const uint32_t requiredBytesLength =
static_cast<uint32_t>((aLength + 1) / 4 * 3);

uint8_t* buffer;
rv = rg->GenerateRandomBytes(requiredBytesLength, &buffer);
if (NS_FAILED(rv)) return rv;

nsAutoCString temp;
nsDependentCSubstring randomData(reinterpret_cast<const char*>(buffer),
requiredBytesLength);
rv = Base64Encode(randomData, temp);
NS_Free(buffer);
buffer = nullptr;
if (NS_FAILED (rv)) return rv;

temp.Truncate(aLength);

// Base64 characters are alphanumeric (a-zA-Z0-9) and '+' and '/', so we need
// to replace illegal characters -- notably '/'
temp.ReplaceChar(FILE_PATH_SEPARATOR FILE_ILLEGAL_CHARACTERS, '_');

aOutSalt = temp;

return NS_OK;
}


} // end namespace mozilla
6 changes: 0 additions & 6 deletions content/media/VideoUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -257,12 +257,6 @@ ExtractH264CodecDetails(const nsAString& aCodecs,
int16_t& aProfile,
int16_t& aLevel);

// Use a cryptographic quality PRNG to generate raw random bytes
// and convert that to a base64 string suitable for use as a file or URL
// path. This is based on code from nsExternalAppHandler::SetUpTempFile.
nsresult
GenerateRandomPathName(nsCString& aOutSalt, uint32_t aLength);

} // end namespace mozilla

#endif
35 changes: 31 additions & 4 deletions content/media/android/AndroidMediaResourceServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -438,19 +438,46 @@ AndroidMediaResourceServer::AppendRandomPath(nsCString& aUrl)
// and convert that to a base64 string for use as an URL path. This
// is based on code from nsExternalAppHandler::SetUpTempFile.
nsresult rv;
nsAutoCString salt;
rv = GenerateRandomPathName(salt, 16);
nsCOMPtr<nsIRandomGenerator> rg =
do_GetService("@mozilla.org/security/random-generator;1", &rv);
if (NS_FAILED(rv)) return rv;

// For each three bytes of random data we will get four bytes of
// ASCII. Request a bit more to be safe and truncate to the length
// we want at the end.
const uint32_t wantedFileNameLength = 16;
const uint32_t requiredBytesLength =
static_cast<uint32_t>((wantedFileNameLength + 1) / 4 * 3);

uint8_t* buffer;
rv = rg->GenerateRandomBytes(requiredBytesLength, &buffer);
if (NS_FAILED(rv)) return rv;

nsAutoCString tempLeafName;
nsDependentCSubstring randomData(reinterpret_cast<const char*>(buffer),
requiredBytesLength);
rv = Base64Encode(randomData, tempLeafName);
NS_Free(buffer);
buffer = nullptr;
if (NS_FAILED (rv)) return rv;

tempLeafName.Truncate(wantedFileNameLength);

// Base64 characters are alphanumeric (a-zA-Z0-9) and '+' and '/', so we need
// to replace illegal characters -- notably '/'
tempLeafName.ReplaceChar(FILE_PATH_SEPARATOR FILE_ILLEGAL_CHARACTERS, '_');

aUrl += "/";
aUrl += salt;
aUrl += tempLeafName;

return NS_OK;
}

nsresult
AndroidMediaResourceServer::AddResource(mozilla::MediaResource* aResource, nsCString& aUrl)
{
nsCString url = GetURLPrefix();
nsresult rv = GenerateRandomPathName(url, 16);
nsresult rv = AppendRandomPath(url);
if (NS_FAILED (rv)) return rv;

{
Expand Down

0 comments on commit 9a829fc

Please sign in to comment.