quvi may output utf-8 encoded data when the conifigured locale doesn't support that; avoid crashing on such invalid encoding.
This commit is contained in:
parent
af863b5b1b
commit
08bb3b1b1d
4 changed files with 37 additions and 8 deletions
|
@ -14,7 +14,8 @@ import Common
|
||||||
import Utility.Url
|
import Utility.Url
|
||||||
|
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
import Data.ByteString.Lazy.UTF8 (fromString)
|
import qualified Data.ByteString as B
|
||||||
|
import qualified Data.ByteString.Lazy as BL
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Network.URI (uriAuthority, uriRegName)
|
import Network.URI (uriAuthority, uriRegName)
|
||||||
import Data.Char
|
import Data.Char
|
||||||
|
@ -77,8 +78,8 @@ type Query a = QuviVersion -> [CommandParam] -> URLString -> IO a
|
||||||
forceQuery :: Query (Maybe Page)
|
forceQuery :: Query (Maybe Page)
|
||||||
forceQuery v ps url = query' v ps url `catchNonAsync` onerr
|
forceQuery v ps url = query' v ps url `catchNonAsync` onerr
|
||||||
where
|
where
|
||||||
onerr _ = ifM (inPath "quvi")
|
onerr e = ifM (inPath "quvi")
|
||||||
( error "quvi failed"
|
( error ("quvi failed: " ++ show e)
|
||||||
, error "quvi is not installed"
|
, error "quvi is not installed"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -89,9 +90,11 @@ query v ps url = flip catchNonAsync (const $ return Nothing) (query' v ps url)
|
||||||
|
|
||||||
query' :: Query (Maybe Page)
|
query' :: Query (Maybe Page)
|
||||||
query' Quvi09 ps url = parseEnum
|
query' Quvi09 ps url = parseEnum
|
||||||
<$> readProcess "quvi" (toCommand $ [Param "dump", Param "-p", Param "enum"] ++ ps ++ [Param url])
|
<$> readQuvi (toCommand $ [Param "dump", Param "-p", Param "enum"] ++ ps ++ [Param url])
|
||||||
query' Quvi04 ps url = decode . fromString
|
query' Quvi04 ps url = do
|
||||||
<$> readProcess "quvi" (toCommand $ ps ++ [Param url])
|
let p = proc "quvi" (toCommand $ ps ++ [Param url])
|
||||||
|
decode . BL.fromStrict
|
||||||
|
<$> withHandle StdoutHandle createProcessSuccess p B.hGetContents
|
||||||
query' NoQuvi _ _ = return Nothing
|
query' NoQuvi _ _ = return Nothing
|
||||||
|
|
||||||
queryLinks :: Query [URLString]
|
queryLinks :: Query [URLString]
|
||||||
|
@ -131,8 +134,7 @@ listdomains :: QuviVersion -> IO [String]
|
||||||
listdomains Quvi09 = concatMap (split ",")
|
listdomains Quvi09 = concatMap (split ",")
|
||||||
. concatMap (drop 1 . words)
|
. concatMap (drop 1 . words)
|
||||||
. filter ("domains: " `isPrefixOf`) . lines
|
. filter ("domains: " `isPrefixOf`) . lines
|
||||||
<$> readProcess "quvi"
|
<$> readQuvi (toCommand [Param "info", Param "-p", Param "domains"])
|
||||||
(toCommand [Param "info", Param "-p", Param "domains"])
|
|
||||||
listdomains _ = return []
|
listdomains _ = return []
|
||||||
|
|
||||||
type QuviParams = QuviVersion -> [CommandParam]
|
type QuviParams = QuviVersion -> [CommandParam]
|
||||||
|
@ -150,3 +152,14 @@ httponly :: QuviParams
|
||||||
-- No way to do it with 0.9?
|
-- No way to do it with 0.9?
|
||||||
httponly Quvi04 = [Param "-c", Param "http"]
|
httponly Quvi04 = [Param "-c", Param "http"]
|
||||||
httponly _ = [] -- No way to do it with 0.9?
|
httponly _ = [] -- No way to do it with 0.9?
|
||||||
|
|
||||||
|
{- Both versions of quvi will output utf-8 encoded data even when
|
||||||
|
- the locale doesn't support it. -}
|
||||||
|
readQuvi :: [String] -> IO String
|
||||||
|
readQuvi ps = withHandle StdoutHandle createProcessSuccess p $ \h -> do
|
||||||
|
fileEncoding h
|
||||||
|
r <- hGetContentsStrict h
|
||||||
|
hClose h
|
||||||
|
return r
|
||||||
|
where
|
||||||
|
p = proc "quvi" ps
|
||||||
|
|
2
debian/changelog
vendored
2
debian/changelog
vendored
|
@ -14,6 +14,8 @@ git-annex (5.20151102.2) UNRELEASED; urgency=medium
|
||||||
out of the annex back to the file, because other files may point to
|
out of the annex back to the file, because other files may point to
|
||||||
that same content. Instead, copy the injected file content out to
|
that same content. Instead, copy the injected file content out to
|
||||||
recover.
|
recover.
|
||||||
|
* quvi may output utf-8 encoded data when the conifigured locale doesn't
|
||||||
|
support that; avoid crashing on such invalid encoding.
|
||||||
|
|
||||||
-- Joey Hess <id@joeyh.name> Wed, 04 Nov 2015 12:50:20 -0400
|
-- Joey Hess <id@joeyh.name> Wed, 04 Nov 2015 12:50:20 -0400
|
||||||
|
|
||||||
|
|
|
@ -68,3 +68,5 @@ on Linux.
|
||||||
|
|
||||||
I love it. It has motivated me enough to start organizing my files spread on different machines, disks etc. at least a little :-)
|
I love it. It has motivated me enough to start organizing my files spread on different machines, disks etc. at least a little :-)
|
||||||
|
|
||||||
|
> [[fixed|done]]; quvi output is now parsed in a locale-independant manner.
|
||||||
|
> --[[Joey]]
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 1"""
|
||||||
|
date="2015-11-09T15:45:35Z"
|
||||||
|
content="""
|
||||||
|
This works fine when LANG is set to a utf-8 capable locale. I reproduced it
|
||||||
|
with LANG=C. quvi outputs utf-8 in that configuration, and git-annex,
|
||||||
|
following the locale settings, did not know what to do with that.
|
||||||
|
|
||||||
|
Easily fixed, but you'll have better luck in general if you get into a
|
||||||
|
utf-8 capable locale.
|
||||||
|
"""]]
|
Loading…
Add table
Add a link
Reference in a new issue