Fix buffer overflow
Turns out testing for an empty buffer outside the critical section wasn't a good idea (testing in a virtual 10 started the thread between the test and enter, causing buffer overflow in the small loop).
This commit is contained in:
parent
44e5941a08
commit
05e765c881
11
ANSI.c
11
ANSI.c
@ -184,7 +184,8 @@
|
|||||||
combine multiple CRs as one (to ignore all CRs before LF);
|
combine multiple CRs as one (to ignore all CRs before LF);
|
||||||
don't process CR or BS during CRM;
|
don't process CR or BS during CRM;
|
||||||
don't flush CR immediately (to catch following LF);
|
don't flush CR immediately (to catch following LF);
|
||||||
fix CRM with all partial RM sequences.
|
fix CRM with all partial RM sequences;
|
||||||
|
check for the empty buffer within the critical section.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ansicon.h"
|
#include "ansicon.h"
|
||||||
@ -639,10 +640,14 @@ void FlushBuffer( void )
|
|||||||
{
|
{
|
||||||
DWORD nWritten;
|
DWORD nWritten;
|
||||||
|
|
||||||
if (nCharInBuffer <= 0) return;
|
|
||||||
|
|
||||||
EnterCriticalSection( &CritSect );
|
EnterCriticalSection( &CritSect );
|
||||||
|
|
||||||
|
if (nCharInBuffer <= 0)
|
||||||
|
{
|
||||||
|
LeaveCriticalSection( &CritSect );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!awm && !im)
|
if (!awm && !im)
|
||||||
{
|
{
|
||||||
if (pState->crm)
|
if (pState->crm)
|
||||||
|
@ -336,7 +336,8 @@ Version History
|
|||||||
|
|
||||||
1.81-wip - 26 December, 2017:
|
1.81-wip - 26 December, 2017:
|
||||||
- fix multiple CRs before LF (including preventing an immediate flush);
|
- fix multiple CRs before LF (including preventing an immediate flush);
|
||||||
- fix CR, BS and partial RM during CRM.
|
- fix CR, BS and partial RM during CRM;
|
||||||
|
- fix buffer overflow caused by incorrect critical section.
|
||||||
|
|
||||||
1.80 - 24 December, 2017:
|
1.80 - 24 December, 2017:
|
||||||
- fix unloading;
|
- fix unloading;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user