This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch master in repository x2gokdrive. from 7707e4d add some support for HTML5 client (like converting pointer cursors to PNG format). new 6a1569f fix crashing if client is sending unrequested selection. The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Summary of changes: debian/changelog | 1 + x2gokdriveremote.c | 20 ++++++++++++++------ x2gokdriveremote.h | 1 + 3 files changed, 16 insertions(+), 6 deletions(-) -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gokdrive.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2gokdrive. commit 6a1569f1c47613b5dcabaf3eee4056b27ee307cb Author: Oleksandr <oleksandr.shneyder@external.eumetsat.int> Date: Thu Feb 18 10:13:43 2021 -0600 fix crashing if client is sending unrequested selection. --- debian/changelog | 1 + x2gokdriveremote.c | 20 ++++++++++++++------ x2gokdriveremote.h | 1 + 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/debian/changelog b/debian/changelog index c65b49d..b652c50 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,6 +17,7 @@ x2gokdrive (0.0.0.1-0x2go1) UNRELEASED; urgency=medium - support sending and recieving selections on demand. Support reading and writing INCR properties. - move declaration of RemoteHostVars from x2gokdriveremote.h to x2gokdriveremote.c. - add some support for HTML5 client (like converting pointer cursors to PNG format). + - fix crashing if client is sending unrequested selection. [ Mihai Moldovan ] * Initial release: diff --git a/x2gokdriveremote.c b/x2gokdriveremote.c index a41cfb4..620332f 100644 --- a/x2gokdriveremote.c +++ b/x2gokdriveremote.c @@ -48,6 +48,7 @@ static BOOL remoteInitialized=FALSE; void remote_selection_init(void) { remoteVars.selstruct.readingInputBuffer=-1; + remoteVars.selstruct.currentInputBuffer=CLIPBOARD; selection_init(&remoteVars); } @@ -1989,7 +1990,7 @@ void readInputSelectionBuffer(char* buff) pthread_mutex_lock(&remoteVars.selstruct.inMutex); - selbuff = &remoteVars.selstruct.inSelection[remoteVars.selstruct.readingInputBuffer]; + selbuff = &remoteVars.selstruct.inSelection[remoteVars.selstruct.currentInputBuffer]; //if the data is not compressed read it directly to the buffer if(!selbuff->currentChunkCompressedSize) @@ -2030,14 +2031,14 @@ void readInputSelectionBuffer(char* buff) if(selbuff->bytesReady==selbuff->size) { //selection buffer received completely -// EPHYR_DBG("READY Selection %d, MIME %d, Read %d from %d", remoteVars.selstruct.readingInputBuffer, selbuff->mimeData, selbuff->bytesReady, selbuff->size); +// EPHYR_DBG("READY Selection %d, MIME %d, Read %d from %d", remoteVars.selstruct.currentInputBuffer, selbuff->mimeData, selbuff->bytesReady, selbuff->size); //send notify to system that we are using selection //if state is requested we already own this selection after notify if(selbuff->state != REQUESTED) - own_selection(remoteVars.selstruct.readingInputBuffer); + own_selection(remoteVars.selstruct.currentInputBuffer); selbuff->state=COMPLETED; //send notification event to interrupt sleeping selection thread - client_sel_data_notify(remoteVars.selstruct.readingInputBuffer); + client_sel_data_notify(remoteVars.selstruct.currentInputBuffer); } //unlock selection @@ -2080,6 +2081,13 @@ void readInputSelectionHeader(char* buff) totalSize=size; } + //sanity check + if((destination != PRIMARY)&& (destination!= CLIPBOARD)) + { + EPHYR_DBG("WARNING: unsupported destination %d, setting to CLIPBOARD",destination); + destination=CLIPBOARD; + } + EPHYR_DBG("HAVE NEW INCOMING SELECTION Chunk: sel %d size %d mime %d compressed size %d, total %d",destination, size, mime, compressedSize, totalSize); @@ -2157,7 +2165,7 @@ void readInputSelectionHeader(char* buff) if(selbuff->currentChunkBytesReady != selbuff->currentChunkSize) { // we didn't recieve complete chunk yet, next event will have data - remoteVars.selstruct.readingInputBuffer=destination; + remoteVars.selstruct.currentInputBuffer=remoteVars.selstruct.readingInputBuffer=destination; } } else @@ -2165,7 +2173,7 @@ void readInputSelectionHeader(char* buff) if(selbuff->currentChunkBytesReady != selbuff->currentChunkCompressedSize) { // we didn't recieve complete chunk yet, next event will have data - remoteVars.selstruct.readingInputBuffer=destination; + remoteVars.selstruct.currentInputBuffer=remoteVars.selstruct.readingInputBuffer=destination; } else { diff --git a/x2gokdriveremote.h b/x2gokdriveremote.h index 0b03917..df50d05 100644 --- a/x2gokdriveremote.h +++ b/x2gokdriveremote.h @@ -345,6 +345,7 @@ struct SelectionStructure //Input selection members int readingInputBuffer; //which selection are reading input buffer at the moments: PRIMARY, CLIPBOARD or -1 if none + int currentInputBuffer; //which selection represents input buffer at the moments: PRIMARY or CLIPBOARD struct InputBuffer inSelection[2]; //PRIMARY an CLIPBOARD selection buffers //list of delayed requests -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gokdrive.git