Просмотр исходного кода

Merge branch 'master' of github.com:teodesian/tCMS

George S. Baugh 5 лет назад
Родитель
Сommit
582e902818
1 измененных файлов с 8 добавлено и 4 удалено
  1. 8 4
      lib/Trog/Data/FlatFile.pm

+ 8 - 4
lib/Trog/Data/FlatFile.pm

@@ -28,7 +28,7 @@ You can only post once per second due to it storing each post as a file named af
 
 =cut
 
-our $parser = JSON::MaybeXS->new();
+our $parser = JSON::MaybeXS->new( utf8 => 1 );
 
 sub read ($self, $query={}) {
     $query->{limit} //= 25;
@@ -47,12 +47,16 @@ sub read ($self, $query={}) {
     my @items;
     foreach my $item (@index) {
         next unless -f $item;
-        my $slurped = eval { File::Slurper::read_text($item) };
+        my $slurped = eval { File::Slurper::read_binary($item) };
         if (!$slurped) {
             print "Failed to Read $item:\n$@\n";
             next;
         }
-        my $parsed  = $parser->decode($slurped);
+        my $parsed  = eval { $parser->decode($slurped) };
+        if (!$parsed) {
+            print "JSON Decode error on $item:\n$@\n";
+            next;
+        }
 
         #XXX this imposes an inefficiency in itself, get() will filter uselessly again here
         my @filtered = $self->filter($query,@$parsed);
@@ -78,7 +82,7 @@ sub write($self,$data) {
         my $file = "$datastore/$post->{id}";
         my $update = [$post];
         if (-f $file) {
-            my $slurped = File::Slurper::read_text($file);
+            my $slurped = File::Slurper::read_binary($file);
             my $parsed  = $parser->decode($slurped);
 
             $update = [(@$parsed, $post)];