improper copy amounts not accounting for size of the copy (non byte copy)
Some documenting comments
This commit is contained in:
Michael Miller
2023-02-04 11:34:17 -08:00
committed by GitHub
parent b8a7f55914
commit 332fce28ed
2 changed files with 42 additions and 28 deletions

View File

@@ -35,6 +35,10 @@ private:
void ScaleColor(uint16_t scale, typename T_COLOR_FEATURE::ColorObject* color) void ScaleColor(uint16_t scale, typename T_COLOR_FEATURE::ColorObject* color)
{ {
// This is the similiar as calling Dim on the color object
// there is an assumption that all color elements are byte aligned
// so if any future color object gets introduced that is not it will
// cause a problem
uint8_t* ptr = (uint8_t*)color; uint8_t* ptr = (uint8_t*)color;
uint8_t* ptrEnd = ptr + sizeof(typename T_COLOR_FEATURE::ColorObject); uint8_t* ptrEnd = ptr + sizeof(typename T_COLOR_FEATURE::ColorObject);
@@ -47,12 +51,17 @@ private:
void ConvertColor(typename T_COLOR_FEATURE::ColorObject* color) void ConvertColor(typename T_COLOR_FEATURE::ColorObject* color)
{ {
// This is the same as calling Dim on the color object
uint16_t scale = _brightness + 1; uint16_t scale = _brightness + 1;
ScaleColor(scale, color); ScaleColor(scale, color);
} }
void RecoverColor(typename T_COLOR_FEATURE::ColorObject* color) const void RecoverColor(typename T_COLOR_FEATURE::ColorObject* color) const
{ {
// this is the same as calling Brighton on the color object
// there is an assumption that all color elements are byte aligned
// so if any future color object gets introduced that is not it will
// cause a problem
uint8_t* ptr = (uint8_t*)color; uint8_t* ptr = (uint8_t*)color;
uint8_t* ptrEnd = ptr + sizeof(typename T_COLOR_FEATURE::ColorObject); uint8_t* ptrEnd = ptr + sizeof(typename T_COLOR_FEATURE::ColorObject);
uint16_t scale = _brightness + 1; uint16_t scale = _brightness + 1;

View File

@@ -42,7 +42,8 @@ public:
static void replicatePixel(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count) static void replicatePixel(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count)
{ {
uint8_t* pEnd = pPixelDest + (count * PixelSize); const uint8_t* pEnd = pPixelDest + (count * PixelSize);
while (pPixelDest < pEnd) while (pPixelDest < pEnd)
{ {
for (uint8_t iElement = 0; iElement < PixelSize; iElement++) for (uint8_t iElement = 0; iElement < PixelSize; iElement++)
@@ -54,7 +55,8 @@ public:
static void movePixelsInc(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count) static void movePixelsInc(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count)
{ {
uint8_t* pEnd = pPixelDest + (count * PixelSize); const uint8_t* pEnd = pPixelDest + (count * PixelSize);
while (pPixelDest < pEnd) while (pPixelDest < pEnd)
{ {
*pPixelDest++ = *pPixelSrc++; *pPixelDest++ = *pPixelSrc++;
@@ -63,8 +65,9 @@ public:
static void movePixelsInc_P(uint8_t* pPixelDest, PGM_VOID_P pPixelSrc, uint16_t count) static void movePixelsInc_P(uint8_t* pPixelDest, PGM_VOID_P pPixelSrc, uint16_t count)
{ {
uint8_t* pEnd = pPixelDest + (count * PixelSize); const uint8_t* pEnd = pPixelDest + (count * PixelSize);
const uint8_t* pSrc = reinterpret_cast<const uint8_t*>(pPixelSrc); const uint8_t* pSrc = reinterpret_cast<const uint8_t*>(pPixelSrc);
while (pPixelDest < pEnd) while (pPixelDest < pEnd)
{ {
*pPixelDest++ = pgm_read_byte(pSrc++); *pPixelDest++ = pgm_read_byte(pSrc++);
@@ -75,6 +78,7 @@ public:
{ {
uint8_t* pDestBack = pPixelDest + (count * PixelSize); uint8_t* pDestBack = pPixelDest + (count * PixelSize);
const uint8_t* pSrcBack = pPixelSrc + (count * PixelSize); const uint8_t* pSrcBack = pPixelSrc + (count * PixelSize);
while (pDestBack > pPixelDest) while (pDestBack > pPixelDest)
{ {
*--pDestBack = *--pSrcBack; *--pDestBack = *--pSrcBack;
@@ -102,8 +106,8 @@ public:
{ {
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest); uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc); const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
const uint32_t* pEnd = pDest + count; // * PixelSize / sizeof(*pDest);
uint32_t* pEnd = pDest + count;
while (pDest < pEnd) while (pDest < pEnd)
{ {
*pDest++ = *pSrc; *pDest++ = *pSrc;
@@ -114,7 +118,8 @@ public:
{ {
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest); uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc); const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
uint32_t* pEnd = pDest + count; const uint32_t* pEnd = pDest + count; // * PixelSize / sizeof(*pDest);
while (pDest < pEnd) while (pDest < pEnd)
{ {
*pDest++ = *pSrc++; *pDest++ = *pSrc++;
@@ -125,7 +130,8 @@ public:
{ {
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest); uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc); const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
uint32_t* pEnd = pDest + count; const uint32_t* pEnd = pDest + count; // * PixelSize / sizeof(*pDest);
while (pDest < pEnd) while (pDest < pEnd)
{ {
*pDest++ = pgm_read_dword(pSrc++); *pDest++ = pgm_read_dword(pSrc++);
@@ -136,8 +142,9 @@ public:
{ {
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest); uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc); const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
uint32_t* pDestBack = pDest + count; uint32_t* pDestBack = pDest + count; // * PixelSize / sizeof(*pDest);
const uint32_t* pSrcBack = pSrc + count; const uint32_t* pSrcBack = pSrc + count; // * PixelSize / sizeof(*pSrc);
while (pDestBack > pDest) while (pDestBack > pDest)
{ {
*--pDestBack = *--pSrcBack; *--pDestBack = *--pSrcBack;
@@ -165,8 +172,8 @@ public:
{ {
uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest); uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest);
const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc); const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc);
const uint16_t* pEnd = pDest + (count * PixelSize / sizeof(*pDest));
uint16_t* pEnd = pDest + (count * PixelSize / 2);
while (pDest < pEnd) while (pDest < pEnd)
{ {
*pDest++ = *pSrc; *pDest++ = *pSrc;
@@ -177,7 +184,8 @@ public:
{ {
uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest); uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest);
const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc); const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc);
uint16_t* pEnd = pDest + (count * PixelSize / 2); const uint16_t* pEnd = pDest + (count * PixelSize / sizeof(*pDest));
while (pDest < pEnd) while (pDest < pEnd)
{ {
*pDest++ = *pSrc++; *pDest++ = *pSrc++;
@@ -188,7 +196,8 @@ public:
{ {
uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest); uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest);
const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc); const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc);
uint16_t* pEnd = pDest + (count * PixelSize / 2); const uint16_t* pEnd = pDest + (count * PixelSize / sizeof(*pDest));
while (pDest < pEnd) while (pDest < pEnd)
{ {
*pDest++ = pgm_read_word(pSrc++); *pDest++ = pgm_read_word(pSrc++);
@@ -199,8 +208,9 @@ public:
{ {
uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest); uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest);
const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc); const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc);
uint16_t* pDestBack = pDest + (count * PixelSize / 2); uint16_t* pDestBack = pDest + (count * PixelSize / sizeof(*pDest));
const uint16_t* pSrcBack = pSrc + (count * PixelSize / 2); const uint16_t* pSrcBack = pSrc + (count * PixelSize / sizeof(*pSrc));
while (pDestBack > pDest) while (pDestBack > pDest)
{ {
*--pDestBack = *--pSrcBack; *--pDestBack = *--pSrcBack;
@@ -228,8 +238,8 @@ public:
{ {
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest); uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc); const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
const uint32_t* pEnd = pDest + (count * PixelSize / sizeof(*pDest));
uint32_t* pEnd = pDest + (count * PixelSize);
while (pDest < pEnd) while (pDest < pEnd)
{ {
*pDest++ = *pSrc; *pDest++ = *pSrc;
@@ -240,7 +250,8 @@ public:
{ {
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest); uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc); const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
uint32_t* pEnd = pDest + (count * PixelSize); const uint32_t* pEnd = pDest + (count * PixelSize / sizeof(*pDest));
while (pDest < pEnd) while (pDest < pEnd)
{ {
*pDest++ = *pSrc++; *pDest++ = *pSrc++;
@@ -251,7 +262,8 @@ public:
{ {
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest); uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc); const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
uint32_t* pEnd = pDest + (count * PixelSize); const uint32_t* pEnd = pDest + (count * PixelSize / sizeof(*pDest));
while (pDest < pEnd) while (pDest < pEnd)
{ {
*pDest++ = pgm_read_dword(pSrc++); *pDest++ = pgm_read_dword(pSrc++);
@@ -262,8 +274,9 @@ public:
{ {
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest); uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc); const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
uint32_t* pDestBack = pDest + (count * PixelSize); uint32_t* pDestBack = pDest + (count * PixelSize / sizeof(*pDest));
const uint32_t* pSrcBack = pSrc + (count * PixelSize); const uint32_t* pSrcBack = pSrc + (count * PixelSize / sizeof(*pSrc));
while (pDestBack > pDest) while (pDestBack > pDest)
{ {
*--pDestBack = *--pSrcBack; *--pDestBack = *--pSrcBack;
@@ -392,7 +405,6 @@ public:
return color; return color;
} }
}; };
class NeoGrbwFeature : public Neo4ByteElementsNoSettings class NeoGrbwFeature : public Neo4ByteElementsNoSettings
@@ -434,7 +446,6 @@ public:
return color; return color;
} }
}; };
class NeoRgbwFeature : public Neo4ByteElementsNoSettings class NeoRgbwFeature : public Neo4ByteElementsNoSettings
@@ -475,7 +486,6 @@ public:
return color; return color;
} }
}; };
class NeoRgbFeature : public Neo3ByteElementsNoSettings class NeoRgbFeature : public Neo3ByteElementsNoSettings
@@ -512,8 +522,7 @@ public:
color.B = pgm_read_byte(p); color.B = pgm_read_byte(p);
return color; return color;
} }
}; };
class NeoBrgFeature : public Neo3ByteElementsNoSettings class NeoBrgFeature : public Neo3ByteElementsNoSettings
@@ -550,8 +559,7 @@ public:
color.G = pgm_read_byte(p); color.G = pgm_read_byte(p);
return color; return color;
} }
}; };
class NeoRbgFeature : public Neo3ByteElementsNoSettings class NeoRbgFeature : public Neo3ByteElementsNoSettings
@@ -590,7 +598,6 @@ public:
return color; return color;
} }
}; };
class NeoBgrFeature : public Neo3ByteElementsNoSettings class NeoBgrFeature : public Neo3ByteElementsNoSettings
@@ -629,7 +636,6 @@ public:
return color; return color;
} }
}; };
class NeoRgbw64Feature : public Neo8ByteElementsNoSettings class NeoRgbw64Feature : public Neo8ByteElementsNoSettings
@@ -713,7 +719,6 @@ typedef NeoRgb48Feature NeoRgbUcs8903Feature;
typedef NeoRgbw64Feature NeoRgbwUcs8904Feature; typedef NeoRgbw64Feature NeoRgbwUcs8904Feature;
class NeoGrb48Feature : public Neo6ByteElementsNoSettings class NeoGrb48Feature : public Neo6ByteElementsNoSettings
{ {
public: public: