Re: [ros-diffs] 01/01: [WIN32SS] Fix NtUserGetClipboardData for text paste (#645)

Pierre Schweitzer <[email protected]> Wed, 4 Jul 2018 07:41:28 +0200
Newsgroups gmane.os.reactos.kernel
Message-ID <[email protected]>
For the record, that commit seems to have broken ReactOS testing (see
testman, which records last successful test run for 2170901, ie,
previous commit).

Starting with that commit, any regression test run never ends.
It seems bug reports have been creating regarding regressions (timeouts)
in the tests but got ignored so far.

It would be great to fix these before pushing any other commits.

Cheers,
Pierre

Le 30/06/2018 à 17:12, Katayama Hirofumi MZ a écrit :
> https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6abc9f5b5af6cc7b7c57ff9c6bcc4a919cf85d1e
> 
> commit 6abc9f5b5af6cc7b7c57ff9c6bcc4a919cf85d1e
> Author:     Katayama Hirofumi MZ <[email protected]>
> AuthorDate: Sun Jul 1 00:12:23 2018 +0900
> Commit:     Hermès BÉLUSCA - MAÏTO <[email protected]>
> CommitDate: Sat Jun 30 17:12:23 2018 +0200
> 
>     [WIN32SS] Fix NtUserGetClipboardData for text paste (#645)
>     
>     Fix the NtUserGetClipboardData function for the synthesized text formats (CF_TEXT, CF_OEMTEXT and CF_UNICODETEXT).
>     CORE-11471
> ---
>  win32ss/user/ntuser/clipboard.c | 47 ++++++++++++++++++++++++++---------------
>  1 file changed, 30 insertions(+), 17 deletions(-)
> 
> diff --git a/win32ss/user/ntuser/clipboard.c b/win32ss/user/ntuser/clipboard.c
> index 92109953cc..04e5d22291 100644
> --- a/win32ss/user/ntuser/clipboard.c
> +++ b/win32ss/user/ntuser/clipboard.c
> @@ -294,8 +294,8 @@ IntAddSynthesizedFormats(PWINSTATION_OBJECT pWinStaObj)
>      bHaveBm = IntIsFormatAvailable(pWinStaObj, CF_BITMAP);
>      bHaveDib = IntIsFormatAvailable(pWinStaObj, CF_DIB);
>  
> -    /* Add CF_LOCALE format if we have CF_TEXT */
> -    if (!bHaveLocale && bHaveText)
> +    /* Add CF_LOCALE format if we have CF_TEXT, CF_OEMTEXT or CF_UNICODETEXT */
> +    if (!bHaveLocale && (bHaveText || bHaveOemText || bHaveUniText))
>      {
>          PCLIPBOARDDATA pMemObj;
>          HANDLE hMem;
> @@ -881,6 +881,7 @@ NtUserGetClipboardData(UINT fmt, PGETCLIPBDATA pgcd)
>      HANDLE hRet = NULL;
>      PCLIP pElement;
>      PWINSTATION_OBJECT pWinStaObj;
> +    UINT uSourceFmt = fmt;
>  
>      TRACE("NtUserGetClipboardData(%x, %p)\n", fmt, pgcd);
>  
> @@ -898,18 +899,7 @@ NtUserGetClipboardData(UINT fmt, PGETCLIPBDATA pgcd)
>      }
>  
>      pElement = IntGetFormatElement(pWinStaObj, fmt);
> -    if (pElement && IS_DATA_DELAYED(pElement) && pWinStaObj->spwndClipOwner)
> -    {
> -        /* Send WM_RENDERFORMAT message */
> -        pWinStaObj->fInDelayedRendering = TRUE;
> -        co_IntSendMessage(pWinStaObj->spwndClipOwner->head.h, WM_RENDERFORMAT, (WPARAM)fmt, 0);
> -        pWinStaObj->fInDelayedRendering = FALSE;
> -
> -        /* Data should be in clipboard now */
> -        pElement = IntGetFormatElement(pWinStaObj, fmt);
> -    }
> -
> -    if (!pElement || IS_DATA_DELAYED(pElement))
> +    if (!pElement)
>          goto cleanup;
>  
>      if (IS_DATA_SYNTHESIZED(pElement))
> @@ -921,20 +911,43 @@ NtUserGetClipboardData(UINT fmt, PGETCLIPBDATA pgcd)
>              case CF_UNICODETEXT:
>              case CF_TEXT:
>              case CF_OEMTEXT:
> -                pElement = IntGetFormatElement(pWinStaObj, CF_UNICODETEXT);
> +                uSourceFmt = CF_UNICODETEXT;
> +                pElement = IntGetFormatElement(pWinStaObj, uSourceFmt);
>                  if (IS_DATA_SYNTHESIZED(pElement))
> -                    pElement = IntGetFormatElement(pWinStaObj, CF_TEXT);
> +                {
> +                    uSourceFmt = CF_TEXT;
> +                    pElement = IntGetFormatElement(pWinStaObj, uSourceFmt);
> +                }
>                  if (IS_DATA_SYNTHESIZED(pElement))
> -                    pElement = IntGetFormatElement(pWinStaObj, CF_OEMTEXT);
> +                {
> +                    uSourceFmt = CF_OEMTEXT;
> +                    pElement = IntGetFormatElement(pWinStaObj, uSourceFmt);
> +                }
>                  break;
> +
>              case CF_BITMAP:
>                  IntSynthesizeBitmap(pWinStaObj, pElement);
>                  break;
> +
>              default:
>                  ASSERT(FALSE);
>          }
>      }
>  
> +    if (pElement && IS_DATA_DELAYED(pElement) && pWinStaObj->spwndClipOwner)
> +    {
> +        /* Send WM_RENDERFORMAT message */
> +        pWinStaObj->fInDelayedRendering = TRUE;
> +        co_IntSendMessage(pWinStaObj->spwndClipOwner->head.h, WM_RENDERFORMAT, (WPARAM)uSourceFmt, 0);
> +        pWinStaObj->fInDelayedRendering = FALSE;
> +
> +        /* Data should be in clipboard now */
> +        pElement = IntGetFormatElement(pWinStaObj, uSourceFmt);
> +    }
> +
> +    if (!pElement || IS_DATA_DELAYED(pElement))
> +        goto cleanup;
> +
>      _SEH2_TRY
>      {
>          ProbeForWrite(pgcd, sizeof(*pgcd), 1);
> 


-- 
Pierre Schweitzer <pierre at reactos.org>
System & Network Administrator
Senior Kernel Developer
ReactOS Deutschland e.V.

_______________________________________________
Ros-dev mailing list
[email protected]
http://www.reactos.org/mailman/listinfo/ros-dev
signature.asc (application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE+qe4Wfh6h6eUzdawdUVVbD1YWwsFAls8Xg0ACgkQdUVVbD1Y
Wws5jg//TMvlNCvQtHgbSz0O6DdvlVgEO3bfzqe8647ZHVyHyASjK+KVBhVQ6lIp
cZ6kG/r9PajZTb3+AFDoJBcNpqbXyzk6hP684D8PrZy4Xnw39A+bWb8gKqXWksih
i8T+JNjwR9e7MGXiEBUonjqxoU3syMgiv4Z9NkkBXMEVCQkxrqliXR81dw5GoFol
uu7FIcgIpKn6lHeIDY+uUVgfDPCBa40EfrbeZrKWzPqyY4hWbnq/c5YcHVf14n1U
lYTkBs45hPeTsChIFJa2MRlWxin/CB/rJoj3fMuhcKHqYEAsUKFLRzvyBbzXma2+
GzGyMejZicuIpTMIPS+o23ja1pUGyGjRzx9toj62nU5XAR1X0TUVd/pq/cTnA2Md
DkVc5cPwNl7TO7l8A1UpQGsr34cwHdimJNkPYWDjGTsR6meaRGvGGzk4EPgRLbZ+
PL7JQVP8he+GijjBf9eFhw41WrKN/MsQyJ4CVEydM3dFItybSuhhkb8hX14UUzHL
t3EzltALi/2PJu/LM75H1jHVYQf898rOPrOuO0ZmhnUD2wLoK60epLQQ4mF4+sHW
JQPfdJ1USpJH0pE0s1SJfFD5dItVSWMXIGIEgcVwCdqMXJCWHUF+1nkmRBqpdeZE
rp72BQ15hJ81x2RG0GjGiVKnb8NfGtPTe7s16V3dl2wMyb9Q5FY=
=BNGS
-----END PGP SIGNATURE-----